Struktura wiadomości odpowiedzi protokołu SOAP
This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
W tym temacie opisano strukturę wiadomość odpowiedzi protokołu SOAP, aby przeanalizować odpowiedź protokołu SOAP, zamiast korzystać z klasy serwera proxy, dostarczone przez Visual Studio 2005.
Wiadomość odpowiedzi protokołu SOAP zwracanych przez wystąpienie SQL Server może zawierać jedną lub więcej z następujących czynności:
Wyniki są ustawione dla kwerendy SELECT.
Zwraca kod procedur przechowywanych i funkcji zdefiniowanych przez użytkownika.
Liczba wierszy.Jest to liczba wierszy objętych kwerendą.
Wartości parametrów wyjściowych.
Komunikaty o błędach lub błędy.
Poniżej przedstawiono fragment struktury odpowiedź protokołu SOAP, które są zwracane przez SQL Server Po uruchomieniu procedura przechowywana:
<?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ą pakowane w <MethodNameResponse> element w treści protokołu SOAP. The <MethodNameResponse> element may include the following podrzędność elements:
<MethodNameResult> zawiera wyniki, wartości liczby wierszy i komunikaty o błędach i ostrzeżenia.
<OutputParameter> zawiera parametry wyjściowe, jeśli istnieje, zwrócony przez procedur przechowywanych.
<MethodNameResult> 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 w następujący sposób:
Wynik instrukcja SELECT jest otoczona <SqlRowSet> element. Wyniki szeregowane w <SqlRowSet> Użycie 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 danymi.W Visual Studio 2005 Klient, wyniki są zwracane jako System.Data.DataSet obiekty.
Uwaga
Aby załadować SOAP wyniki do System.Data.DataSet obiekty przy użyciu programu Visual Studio 2005, SQL Server musi zawierać wbudowane schematy odpowiedzi protokołu SOAP, które zwraca do klientów. To zachowanie jest włączona dla punktów końcowych, pomijając SCHEMA słowo kluczowe lub podając SCHEMA = STANDARD po utworzeniu punktu końcowego.Aby uzyskać więcej informacji zobaczUtwórz punkt końcowy (języka Transact-SQL).
Wynik SELECT...DO XML jest otoczona instrukcja <SqlXml> element. Wiele zestawów wyników zwracanych (na przykład, procedura przechowywana z wieloma kwerendy SELECT... FOR XML), każdy zestaw wyników jest otoczona własny <SqlXml> element. Ponadto następuje wynik <SqlRowCount> element. 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...DO XML kwerendy żądania przez określenie opcji XMLSCHEMA schematu XSD schematu XSD są zwracane jako pierwszy element podrzędność <SqlXml> element.
W Visual Studio 2005 Klient, wyniki są zwracane jako System.Xml.XmlElement obiektów.
Wartości zwracane kody z procedur przechowywanych i funkcji zdefiniowanych przez użytkownika są pakowane w <SqlResultCode> element, jak pokazano w następującym fragmencie odpowiedzi:
<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 jest zwracany jako obiekt.
SQL Server komunikaty o błędach, ostrzeżenia i inne komunikaty informacyjne są pakowane 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 przechowywana.Aby uzyskać informacje dotyczące tej procedura przechowywana zobacz Przykładowe aplikacje wysyłania żądań usług sieci Web XML macierzysty. Pierwsza instrukcja INSERT w procedurze przechowywanej kończy się niepowodzeniem.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 kliencie programu Visual Studio 2005, te wyniki są zwracane jako SqlMessage typu obiektów.
<OutputParameter> Element
Każda wartość parametru wyjściowego jest zwracany 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> element; jest ona wyświetlana w następującym fragmencie 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>
See Also