Freigeben über


Struktur der SOAP-Antwortnachricht

In diesem Thema wird die Struktur der SOAP-Antwortnachricht beschrieben. Sie benötigen diese Informationen, wenn Sie die SOAP-Antwort analysieren möchten, statt die durch Visual Studio 2005 bereitgestellten Proxyklassen zu verwenden.

Eine SOAP-Antwortmeldung, die von einer Instanz von SQL Server 2005 zurückgegeben wird, kann Folgendes enthalten:

  • Resultset für SELECT-Abfragen.
  • Rückgabecode für gespeicherte Prozeduren und benutzerdefinierte Funktionen.
  • Zeilenanzahl. Die Anzahl der Zeilen, auf die sich die Abfrage ausgewirkt hat.
  • Ausgabeparameterwerte
  • Fehlermeldungen oder -warnungen.

Das folgende Beispiel ist ein Fragment der SOAP-Antwortstruktur, die von SQL Server zurückgegeben wird, nachdem eine gespeicherte Prozedur ausgeführt wurde:

<?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>

Die Ergebnisse einer Operation werden im <MethodNameResponse>-Element im SOAP-Text eingebunden. Das <MethodNameResponse>-Element kann die folgenden untergeordneten Elemente enthalten:

  • <MethodNameResult> enthält die Ergebnisse, die Zeilenanzahlwerte sowie die Fehlermeldungen und -warnungen.
  • <OutputParameter> enthält ggf. Ausgabeparameter, die von gespeicherten Prozeduren zurückgegeben werden.

&lt;MethodNameResult&gt;-Element.

Die Ergebnisse eines Vorgangs werden im <MethodNameResult>-Element zurückgegeben. Dabei ist MethodName entweder der Name einer gespeicherten Prozedur bzw. einer benutzerdefinierten Funktion oder sqlbatch für Ad-hoc-Batchabfragen. sqlbatch ist die Methode, die zum Ausführen von Ad-hoc-Abfragen verwendet wird.

Im <MethodNameResult>-Element sind die Ergebnisse wie folgt serialisiert:

  • Das Ergebnis einer SELECT-Anweisung wird in ein <SqlRowSet>-Element eingebunden. Die im <SqlRowSet>-Element serialisierten Ergebnisse verwenden das DiffGram-Serialisierungsformat. Das DiffGram-Format wird in der DataSet-Komponente von Microsoft .NET Framework eingeführt. In diesem Fall enthält die Antwort außerdem ein XSD-Schema (wenn der Endpunkt mit aktiviertem Schema erstellt wird) vor den Daten. Im Visual Studio 2005-Client werden die Ergebnisse als System.Data.DataSet-Objekte zurückgegeben.

    ms189558.note(de-de,SQL.90).gifHinweis:
    Damit SOAP-Ergebnisse in System.Data.DataSet-Objekte geladen werden, wenn Sie Visual Studio 2005 verwenden, muss SQL Server 2005 Inlineschemas in SOAP-Antworten enthalten, die an Clients zurückgegeben werden. Dieses Verhalten wird für Endpunkte aktiviert, indem entweder das SCHEMA-Schlüsselwort ausgelassen oder SCHEMA=STANDARD beim Erstellen des Endpunktes angegeben wird. Weitere Informationen finden Sie unter CREATE ENDPOINT (Transact-SQL).
  • Das Ergebnis einer SELECT... FOR XML-Anweisung wird in ein <SqlXml>-Element eingebunden. Wenn mehrere Resultsets zurückgegeben werden (z. B. eine gespeicherte Prozedur mit mehreren SELECT...FOR XML-Abfragen), wird jedes Resultset in sein eigenes <SqlXml>-Element eingebunden. Außerdem folgt auf jedes Ergebnis ein <SqlRowCount>-Element. Dieses Element gibt die Anzahl der Zeilen zurück, die von der Abfrage betroffen sind. Das folgende Antwortfragment zeigt dies:

    <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>
    

    Wenn die SELECT... FOR XML-Abfrage ein XSD-Schema durch Angeben der XMLSCHEMA-Option abfragt, wird das XSD-Schema als erstes untergeordnetes Element des <SqlXml>-Elements zurückgegeben.
    Im Visual Studio 2005-Client werden die Ergebnisse als System.Xml.XmlElement-Objekte zurückgegeben.

  • Die Rückgabecodewerte aus gespeicherten Prozeduren und benutzerdefinierten Funktionen werden in ein <SqlResultCode>-Element eingebunden, wie im folgenden Antwortfragment gezeigt wird:
    <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>
    

    Im Visual Studio 2005-Client werden die Ergebnisse als ein Objekt zurückgegeben.

  • Fehlermeldungen, Warnungen und andere Informationsmeldungen von SQL Server 2005 werden in einem <SqlMessage>-Element eingebunden, wie das im folgenden Fragment einer SOAP-Antwort gezeigt wird:

    <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>
    

    Das folgende SOAP-Antwortfragment wird durch Ausführen der gespeicherten Prozedur GetCustomerInfo zurückgegeben. Informationen zu dieser gespeicherten Prozedur finden Sie unter Beispielanwendungen für das Senden systemeigener XML-Webdiensteanforderungen. Die erste INSERT-Anweisung in der gespeicherten Prozedur erzeugt einen Fehler. Dies bewirkt die folgende Antwort.

    <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>
    

    Im Visual Studio 2005-Client werden die Ergebnisse als Objekte vom Typ SqlMessage zurückgegeben.

&lt;OutputParameter&gt;-Element

Jeder Ausgabeparameterwert wird in ein Element eingebunden zurückgegeben. Der Elementname ist der Name des Ausgabeparameters. Beachten Sie, dass dieses Element nach dem <MethodNameResult>-Element als letztes untergeordnetes Element des <MethodNameResponse>-Elements erscheint, wie das im folgenden Fragment einer SOAP-Antwort gezeigt wird. Es werden zwei Ausgabeparameter zurückgegeben.

<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>

Siehe auch

Verweis

Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (C#)
Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (Visual Basic)
Festlegen, dass der Server Anforderungen systemeigener XML-Webdienste überwacht
Struktur der SOAP-Anforderungs- und -Antwortnachrichten
Richtlinien und Einschränkungen für die Verwendung der systemeigenen XML-Webdienste

Andere Ressourcen

Schreiben von Clientanwendungen

Hilfe und Informationen

Informationsquellen für SQL Server 2005