Структура сообщения-ответа SOAP

Этот подраздел описывает структуру сообщений-ответов SOAP, если необходимо проанализировать ответ SOAP вместо использования классов учетной записи-посредника, предоставленных средой Visual Studio 2005.

Сообщение-ответ SOAP, возвращенное экземпляром SQL Server 2005, может включать одно или более из следующего:

  • Результирующий набор запросов SELECT.
  • Код возврата хранимых процедур и пользовательских функций.
  • Число строк таблицы. Это число строк таблицы, затронутых запросом.
  • Значения параметров выходных данных.
  • Сообщения об ошибках или предупреждениях.

Ниже приведен фрагмент структуры ответов SOAP, возвращаемой SQL Server после выполнения хранимой процедуры:

Результаты операции упакованы в элемент <MethodNameResponse> в теле SOAP. Элемент <MethodNameResponse> может включать следующие дочерние элементы:

  • Элемент <MethodNameResult> включает результаты, значения подсчета строк таблицы, сообщения об ошибках и предупреждения.
  • Элемент <OutputParameter> включает параметры выходных данных (при их наличии), возвращенных хранимыми процедурами.

Элемент &lt;MethodNameResult&gt;

Результаты операции возвращаются внутри элемента <MethodNameРезультат>, где MethodName является либо названием хранимой процедуры или пользовательской функции, либо методом sqlbatch для нерегламентированных пакетных запросов. sqlbatch — метод, используемый для выполнения нерегламентированных запросов.

Внутри элемента <MethodNameРезультат> результаты сериализуются следующим образом:

  • Результаты инструкции SELECT упаковываются в элемент <SqlRowSet>. Результаты, упорядоченные в элементе <SqlRowSet>, используют формат сериализации DiffGram. Формат DiffGram вводится в компонент DataSet в среде Microsoft .NET Framework. В этом случае ответ также включает XSD-схему (если схема включена для созданной конечной точки) перед данными. В клиенте Visual Studio 2005 результаты возвращаются как объекты System.Data.DataSet.

    ms189558.note(ru-ru,SQL.90).gifПримечание.
    Для загрузки результатов SOAP в объекты System.Data.DataSet при использовании клиента Visual Studio 2005 SQL Server 2005 должен включать встроенные схемы в ответы SOAP, возвращаемые клиентам. Такое поведение включается для конечных точек либо исключением ключевого слова SCHEMA, либо указанием SCHEMA=STANDARD при создании конечной точки. Дополнительные сведения см. в разделе CREATE ENDPOINT (Transact-SQL).
  • Результат инструкции SELECT... FOR XML упаковывается в элемент <SqlXml>. Если возвращается несколько результирующих наборов (например, хранимая процедура с несколькими запросами SELECT...FOR XML), каждый результирующий набор упаковывается в свой элемент <SqlXml>. Кроме того, за каждым результатом следует элемент <SqlRowCount>. Элемент возвращает число строк таблицы, затронутых запросом, как показано в следующем фрагменте ответа:

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

    Если запрос SELECT... FOR XML запрашивает XSD-схему, указывая параметр XMLSCHEMA, XSD-схема возвращается, как первый дочерний элемент элемента <SqlXml>.
    В клиенте Visual Studio 2005 результаты возвращаются как объекты System.Xml.XmlElement.

  • Значения кода возврата из хранимых процедур и пользовательских функций упаковываются в элемент <SqlResultCode>, как показано в следующем фрагменте ответа:
    <tns:MethodNameResponse>

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

    В клиенте Visual Studio 2005 код возврата возвращается как объект.

  • Сообщения об ошибках, предупреждения и другие информационные сообщения SQL Server 2005 упаковываются в элемент <SqlMessage>, как показано в следующем фрагменте ответа SOAP:

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

    Следующий фрагмент ответа SOAP возвращается запуском хранимой процедуры GetCustomerInfo. Дополнительные сведения об этой хранимой процедуре см. в разделе Образцы приложений, отправляющих запросы к собственным веб-службам с поддержкой XML. Первая инструкция INSERT в хранимой процедуре завершается неуспешно. Это приводит к следующему ответу:

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

    В клиенте Visual Studio 2005 эти результаты возвращаются как объекты типа SqlMessage.

Элемент &lt;OutputParameter&gt;

Каждое значение параметра выходных данных возвращается упакованным в элемент. Название элемента является названием параметра выходных данных. Обратите внимание, что этот элемент появляется после элемента <MethodNameРезультат> как последний дочерний элемент элемента <MethodNameResponse>; это показано в следующем фрагменте ответа SOAP. Возвращаются два параметра выходных данных.

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

См. также

Справочник

Отправка SOAP-запросов с использованием клиента Visual Studio 2005 (C#)
Отправка запросов SOAP с помощью клиента Visual Studio 2005 (Visual Basic)
Настройка сервера на прослушивание запросов собственных веб-служб с поддержкой XML
Структура запроса и ответного сообщения SOAP
Правила и ограничения собственных веб-служб с поддержкой XML

Другие ресурсы

Написание клиентских приложений

Справка и поддержка

Получение помощи по SQL Server 2005