Struktura komunikatu odpowiedzi protokołu SOAP

Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.

W tym temacie opisano struktur komunikatu odpowiedzi protokołu SOAP, jeśli chcesz analizować odpowiedź protokołu SOAP, zamiast korzystania z klasy proxy dostarczonych przez Visual Studio 2005.

Komunikat odpowiedzi protokołu SOAP, zwracana przez wystąpienie SQL Server może zawierać jedną lub więcej z następujących czynności:

  • Zestaw wyników dla kwerend WYBIERAJĄCYCH.

  • Zwraca kod procedury przechowywane i funkcje zdefiniowane przez użytkownika.

  • Liczba wierszy.Jest to liczba wierszy objętych kwerendą.

  • Wartości parametrów wyjściowych.

  • Komunikaty o błędach lub ostrzeżenia.

Oto fragment struktury odpowiedź protokołu SOAP, zwracany przez SQL Server po uruchomieniu procedura składowana:

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

Wyniki operacji są zapakowane w <MethodNameResponse> elementu w treści protokołu SOAP.<MethodNameResponse> Element może zawierać następujące elementy podrzędność:

  • <MethodNameResult> zawiera wyniki wiersza zliczanie wartości i komunikaty o błędach i ostrzeżenia.

  • <OutputParameter> zawiera parametry wyjściowe, jeżeli, zwrócony przez procedur przechowywanych.

&lt;MethodNameResult&gt; Element

The results of an operation are returned inside the <MethodNameResult> element where MethodName is either the name of a stored procedure or user-defined function or is sqlbatch for ad hoc batch queries.sqlbatch is the method used to run ad hoc queries.

Wewnątrz <MethodNamewynik> element, wyniki są szeregowane następująco:

  • Wynik instrukcja SELECT zapakowane jest w <SqlRowSet> elementu.Wyniki są szeregowane w <SqlRowSet> za pomocą elementu w formacie DiffGram format serializacji.The DiffGram format is introduced in the DataSet component of the Microsoft .NET Framework.W takim przypadek odpowiedź zawiera także schematu XSD (jeśli punktem końcowym jest tworzone za pomocą schematu włączone) przed danych.W Visual Studio 2005 klient, wyniki są zwracane jako System.Data.DataSet obiektów.

    Ostrzeżenie

    Załadować SOAP wyniki do System.Data.DataSet obiektów podczas korzystania z Visual Studio 2005, SQL Server musi zawierać schematy wbudowane w odpowiedzi protokołu SOAP, które zwraca do klientów.To zachowanie jest włączona dla punktów końcowych, pomijając SCHEMATU słowo kluczowe lub podając SCHEMATU = STANDARD tworzenia punktu końcowego.Aby uzyskać więcej informacji, zobacz Utwórz punkt końcowy (Transact-SQL).

  • Wynik SELECT...XML instrukcja zapakowane jest w <SqlXml> elementu.Jeśli wiele zestawów wyników zwracanych (na przykład procedura składowana z wieloma SELECT...KWEREND XML), każdy zestaw wyników jest zapakowane w własnym <SqlXml> elementu.Ponadto każdy wynik następuje <SqlRowCount> elementu.Ten element zwraca liczbę wierszy objętych kwerendą, jak pokazano w następującym fragmencie odpowiedzi:

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

    Jeśli SELECT...XML schematu XSD żądań kwerend przez określenie opcji schematu XML schematu XSD są zwracane jako pierwszy element podrzędność z <SqlXml> elementu.

    W Visual Studio 2005 klient, wyniki są zwracane jako System.Xml.XmlElement obiektów.

  • Kod zwrotny wartości z procedur przechowywanych i funkcji zdefiniowanych przez użytkownika są zapakowane w <SqlResultCode> element, jak pokazano w następującym fragmencie odpowiedź:

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

    W Visual Studio 2005 klient, zwrócony kod zwrotny jako obiekt.

  • SQL Serverkomunikaty o błędach, ostrzeżenia i inne komunikaty informacyjne są zapakowane w <SqlMessage> element, jak pokazano w następującym fragmencie odpowiedź protokołu 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>
    

    Poniższy fragment odpowiedź protokołu SOAP jest zwracany przez uruchomienie GetCustomerInfo procedura składowana.Aby uzyskać informacje dotyczące tej procedura składowana, zobacz Przykładowe aplikacje do wysyłania żądań usług sieci Web XML macierzystego.Pierwsza instrukcja INSERT w procedura składowana nie powiedzie się.Powoduje to następujące odpowiedzi.

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

    W programie Visual Studio 2005 klient, te wyniki są zwracane jako SqlMessage wpisz obiektów.

&lt;OutputParameter&gt; Element

Każda wartość parametru wyjściowego jest zwracana zawinięty w elemencie.Nazwa elementu jest nazwą parametru wyjściowego.Należy zauważyć, że ten element jest wyświetlany po <MethodNamewynik> element jako ostatni element podrzędność <MethodNameResponse> elementu; jest to zademonstrowane w poniższy fragment odpowiedź protokołu SOAP.Dwa parametry wyjściowe są zwracane.

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