Structure des messages de réponse SOAP

Cette rubrique décrit la structure des messages de réponse SOAP si vous voulez analyser la réponse SOAP au lieu d'utiliser les classes proxy fournies par Visual Studio 2005.

Un message de réponse SOAP qui est retourné par une instance de SQL Server 2005 peut inclure un ou plusieurs éléments parmi les suivants :

  • l'ensemble de résultats des requêtes SELECT ;
  • le code de retour des procédures stockées et des fonctions définies par l'utilisateur ;
  • le nombre de lignes. Il s'agit du nombre de lignes affectées par la requête ;
  • les valeurs des paramètres de sortie ;
  • des messages d'erreur ou des avertissements.

L'exemple suivant représente un fragment de la structure de réponse SOAP qui est retournée par SQL Server suite à l'exécution d'une procédure stockée :

<?xml version="1.0" encoding="utf-8" ?> 
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  ...>
  <SOAP-ENV:Body>
  <method:MethodNameResponse>
  <method:MethodNameResult  
 xsi:type="sqlresultstream:SqlResultStream">
<!-- 
  the results are returned here
-->
  </method:MethodNameResult>
  <method:OutputParam>Value</method:OutputParam> 
  </method:MethodNameResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

Les résultats d'une opération sont inclus dans l'élément <MethodNameResponse> du corps SOAP. L'élément <MethodNameResponse> peut inclure les éléments enfants suivants :

  • <MethodNameResult> inclut les résultats, les valeurs de nombre de lignes, ainsi que les messages d'erreur et les avertissements.
  • <OutputParameter> inclut les paramètres de sortie, le cas échéant, retournés par les procédures stockées.

Élément &lt;MethodNameResult&gt;

Les résultats d'une opération sont retournés dans l'élément <MethodNameResult> : MethodName correspond au nom d'une procédure stockée ou d'une fonction définie par l'utilisateur, ou correspond à sqlbatch pour les requêtes par lots appropriées. sqlbatch est la méthode utilisée pour exécuter des requêtes appropriées.

Dans l'élément <MethodNameResult>, les résultats peuvent être sérialisés comme suit :

  • Le résultat d'une instruction SELECT est inclus dans l'élément <SqlRowSet>. Les résultats sérialisés dans l'élément <SqlRowSet> utilisent le format de sérialisation DiffGram. Le format DiffGram est introduit dans le composant DataSet de Microsoft .NET Framework. Dans ce cas, la réponse inclut également un schéma XSD (si le point de terminaison est créé alors qu'un schéma est activé) avant les données. Dans le client Visual Studio 2005, les résultats sont retournés en tant qu'objets System.Data.DataSet :

    ms189558.note(fr-fr,SQL.90).gifRemarque :
    Pour charger les résultats SOAP dans des objets System.Data.DataSet lorsque vous utilisez Visual Studio 2005, SQL Server 2005 doit inclure des schémas dans les réponses SOAP qu'il retourne aux clients. Ce comportement est activé pour les points de terminaison en omettant le mot clé SCHEMA ou en spécifiant SCHEMA=STANDARD lorsque vous créez le point de terminaison. Pour plus d'informations, consultez CREATE ENDPOINT (Transact-SQL).
  • Le résultat d'une instruction SELECT... FOR XML est inclus dans un élément <SqlXml>. Si plusieurs ensembles de résultats sont retournés (par exemple, une procédure stockée avec plusieurs requêtes SELECT...FOR XML), chaque ensemble de résultats est inclus dans son propre élément <SqlXml>. Qui plus est, chaque résultat est suivi d'un élément <SqlRowCount>. Cet élément retourne le nombre de lignes affectées par la requête, comme l'indique le fragment de réponse suivant :

    <tns:MethodNameResponse>
      <tns:MethodNameResult 
    xsi:type="sqlsoaptypes:SqlResultStream">
         <sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml" >
     <SqlXml>
        <!-- XML result --> 
     </SqlXml>
    </sqlresultstream:SqlXml>
    <sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount">
       <sqlrowcount:Count>NoOfRowsAffected</sqlrowcount:Count> 
    </sqlresultstream:SqlRowCount>
    <sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml" >
      <SqlXml>
        <!-- XML Document that maps to XMLElement object 
       in the client--> 
      </SqlXml>
    </sqlresultstream:SqlXml>
    <sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount">
       <sqlrowcount:Count>NoOfRowsAffected</sqlrowcount:Count> 
    </sqlresultstream:SqlRowCount>
    
         <!-- more results ...-->
      </tns:MethodNameResult>
      <tns:OutputParam>Value</tns:OutputParam> 
    </tns:MethodNameResponse>
    

    Si la requête SELECT... FOR XML demande un schéma XSD en spécifiant l'option XMLSCHEMA, le schéma XSD est retourné en tant que premier élément enfant de l'élément <SqlXml>.
    Dans le client Visual Studio 2005, les résultats sont retournés en tant qu'objets System.Xml.XmlElement.

  • Les valeurs de code de retour issues des procédures stockées et des fonctions définies par l'utilisateur sont incluses dans un élément <SqlResultCode>, comme l'indique le fragment de réponse suivant :
    <tns:MethodNameResponse>

      <tns:MethodNameResult 
    xsi:type="sqlsoaptypes:SqlResultStream">
      <!-- 
        results 
      -->
         <sqlresultstream:SqlResultCode
    xsi:type="sqlsoaptypes:SqlResultCode">
       ReturnCodeValue
         </sqlresultstream:SqlResultCode> 
      </tns:MethodNameResult>
      <tns:OutputParam>Value</tns:OutputParam> 
    </tns:MethodNameResponse>
    

    Dans le client Visual Studio 2005, le code de retour est retourné en tant qu'objet.

  • Les messages d'erreur, les avertissements et les autres messages d'informations de SQL Server 2005 sont inclus dans un élément <SqlMessage>, comme l'indique le fragment de réponse SOAP suivant :

    <tns:MethodNameResponse>
      <tns:MethodNameResult xsi:type="sqlresultstream:SqlResultStream">
         <sqlresultstream:SqlMessage>
        <!-- Error message returned as SqlMessage object 
     in the client --> 
    </sqlresultstream:SqlMessage>
     ...
      </tns:MethodNameResult>
      <!-- followed by one or more return parameters ->
       ...
    </tns:MethodNameResponse>
    

    Le fragment de réponse SOAP suivant est retourné en exécutant la procédure stockée GetCustomerInfo. Pour plus d'informations sur cette procédure stockée, consultez Exemples d'applications pour l'envoi de demandes de services Web XML natifs. La première instruction INSERT dans la procédure stockée échoue, ce qui entraîne la réponse suivante.

    <method:GetCustomerInfoResponse>
     <method:GetCustomerInfoResult 
        xsi:type="sqlresultstream:SqlResultStream">
        <sqlresultstream:SqlMessage>
         <sqlresultstream:SqlMessage xsi:type="sqlmessage:SqlMessage">
    <sqlmessage:Class>16</sqlmessage:Class> 
    <sqlmessage:LineNumber>12</sqlmessage:LineNumber> 
    <sqlmessage:Message>Cannot insert the value NULL into column 
    'CompanyName', table 'Northwind.dbo.Customers'; 
    column does not allow nulls. INSERT fails. 
    </sqlmessage:Message> 
         <sqlmessage:Number>515</sqlmessage:Number> 
         <sqlmessage:Procedure>GetCustomerInfo</sqlmessage:Procedure> 
         <sqlmessage:Server>SQLServerName</sqlmessage:Server> 
         <sqlmessage:Source>MicrosofTransact-
    SQL/9.0</sqlmessage:Source> 
         <sqlmessage:State>2</sqlmessage:State> 
        </sqlresultstream:SqlMessage>
        <sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount">
     <sqlrowcount:Count>0</sqlrowcount:Count> 
        </sqlresultstream:SqlRowCount> 
        <sqlresultstream:SqlResultCode 
      xsi:type="sqlsoaptypes:SqlResultCode">-6 
        </sqlresultstream:SqlResultCode> 
      </method:GetCustomerInfoResult>
      <!-- followed by one or more output parameters ->
     </method:GetCustomerInfoResponse>
    </tns:MethodNameResponse>
    

    Dans le client Visual Studio 2005, ces résultats sont retournés en tant qu'objets de type SqlMessage.

Élément &lt;OutputParameter&gt;

Chaque valeur de paramètre de sortie est retournée en étant incluse dans un élément. Le nom de l'élément est le nom du paramètre de sortie. Notez que cet élément apparaît après l'élément <MethodNameResult> en tant que dernier enfant de l'élément <MethodNameResponse> ; ceci est illustré dans le fragment de réponse SOAP suivant. Deux paramètres de sortie sont retournés.

<tns:MethodNameResponse>
   <tns:MethodNameResult xsi:type="sqlresultstream:SqlResultStream">
     <!-- results, error messages and warnings -->
   </tns:MethodNameResult>
   <tns:OutputParam1>Value</tns:OutputParam1> 
   <tns:OutputParam2>Value</tns:OutputParam2> 
</tns:MethodNameResponse>

Voir aussi

Référence

Envoi de demandes SOAP à l'aide du client Visual Studio 2005 (C#)
Envoi de demandes SOAP à l'aide du client Visual Studio 2005 (Visual Basic)
Configuration du serveur pour qu'il écoute les demandes de services Web XML natifs
Structure des messages de demande et de réponse SOAP
Instructions et restrictions d'emploi en vigueur dans les services Web XML natifs

Autres ressources

Écriture d'applications clientes

Aide et Informations

Assistance sur SQL Server 2005