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.
<MethodNameResult>-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.
Hinweis: 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.
<OutputParameter>-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