Share via


SOAP 回應訊息結構

本主題描述 SOAP 回應訊息結構,如果您想要剖析 SOAP 回應,而不使用 Visual Studio 2005 提供的 Proxy 類別,就非常適合閱讀。

SQL Server 2005 執行個體所傳回的 SOAP 回應訊息包含下列其中一或多項:

  • SELECT 查詢的結果集。
  • 預存程序及使用者自訂函數的傳回碼。
  • 資料列計數。這是受到查詢影響的資料列數目。
  • 輸出參數值。
  • 警告的錯誤訊。

下列是 SQL Server 在執行預存程序後所傳回的 SOAP 回應結構片段:

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

作業的結果會包裝在 SOAP 主體的 <MethodNameResponse> 元素中。<MethodNameResponse> 元素可包含下列子元素:

  • <MethodNameResult> 包含結果、資料列計數值以及錯誤訊息和警告。
  • <OutputParameter> 包含預存程序傳回的輸出參數 (若有的話)。

&lt;MethodNameResult&gt; 元素

作業的結果會傳回 <MethodNameResult> 元素內部,其中 MethodName 是預存程序或使用者定義之函數的名稱,或特定批次查詢的 sqlbatchsqlbatch 是用來執行特定查詢的方法。

在 <MethodNameResult> 元素內部,結果會如下序列化:

  • SELECT 陳述式的結果是包裝在 <SqlRowSet> 元素中。在 <SqlRowSet> 元素中序列化的結果將使用 DiffGram 序列化格式。DiffGram 格式是包含在 Microsoft .NET Framework 的 DataSet 元件中。在此情況下,回應也會在資料的前面包含 XSD 結構描述 (如果結束點是以啟用的結構描述所建立)。在 Visual Studio 2005 用戶端中,將以 System.Data.DataSet 物件傳回結果。

    ms189558.note(zh-tw,SQL.90).gif附註:
    若要在使用 Visual Studio 2005 時,將 SOAP 結果載入 System.Data.DataSet 物件,SQL Server 2005 必須在它傳回給用戶端的 SOAP 回應中包含內嵌結構描述。在建立結束點時,只要省略 SCHEMA 關鍵字或指定 SCHEMA=STANDARD,就可以啟用此行為。如需詳細資訊,請參閱<CREATE ENDPOINT (Transact-SQL)>。
  • SELECT ...FOR XML 陳述式的結果是包裝在 <SqlXml> 元素中。如果傳回了多個結果集 (例如包含多個 SELECT...FOR XML 查詢的預存程序),每個結果集都會包裝在自己的 <SqlXml> 元素中。此外,每個結果的後面都會加上 <SqlRowCount> 元素。此元素會傳回查詢所影響的資料列數目,如下列回應片段所示:

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

    如果 SELECT ...FOR XML 查詢指定 XMLSCHEMA 選項以要求 XSD 結構描述,則會以 <SqlXml> 元素的第一個子元素傳回 XSD 結構描述。
    在 Visual Studio 2005 用戶端中,會以 System.Xml.XmlElement 物件傳回結果。

  • 預存程序和使用者自訂函數的傳回碼值會包裝在 <SqlResultCode> 元素中,如下列回應片段所示:
    <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>
    

    在 Visual Studio 2005 用戶端中,傳回碼將以物件傳回。

  • SQL Server 2005 的錯誤訊息、警告以及其他參考用的訊息將包裝在 <SqlMessage> 元素中,如下列 SOAP 回應片段所示:

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

    下列 SOAP 回應片段是執行 GetCustomerInfo 預存程序所傳回的。如需有關執行此預存程序的資訊,請參閱<傳送原生 XML Web Service 要求的範例應用程式>。預存程序中的第一個 INSERT 陳述式失敗。這將造成下列回應。

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

    在 Visual Studio 2005 用戶端中,這些結果會以 SqlMessage 物件類型傳回。

&lt;OutputParameter&gt; 元素

每個輸出參數值都是以包裝在元素中的方式傳回。元素名稱是輸出參數的名稱。注意,此元素會出現在 <MethodNameResult> 元素的後面,作為 <MethodNameResponse> 元素的最後子項;如下列 SOAP 回應片段中所示。會傳回兩個輸出參數。

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

請參閱

參考

使用 Visual Studio 2005 用戶端 (C#) 傳送 SOAP 要求
使用 Visual Studio 2005 用戶端 (Visual Basic) 傳送 SOAP 要求
設定伺服器接聽原生 XML Web Service 的要求
SOAP 要求與回應訊息結構
原生 XML Web Service 中的指導方針和限制

其他資源

撰寫用戶端應用程式

說明及資訊

取得 SQL Server 2005 協助