Share via


Struktur der SOAP-Antwortnachricht

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

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-Antwortnachricht, 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.

    HinweisHinweis

    Damit SOAP-Ergebnisse in System.Data.DataSet-Objekte geladen werden, wenn Sie Visual Studio 2005 verwenden, muss SQL Server 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 Endpunkts 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 werden in einem <SqlMessage>-Element eingebunden, wie das im folgenden SOAP-Antwortfragment 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>