Estructura de los mensajes de respuesta SOAP
En este tema se describe la estructura de los mensajes de respuesta SOAP por si desea analizar la respuesta SOAP en lugar de utilizar las clases proxy que ofrece Visual Studio 2005.
Un mensaje de respuesta SOAP devuelto por una instancia de SQL Server 2005 puede incluir uno o varios de los elementos siguientes:
- Conjunto de resultados de las consultas SELECT.
- Código de retorno de procedimientos almacenados y funciones definidas por el usuario.
- Recuento de filas. Es el número de filas afectadas por la consulta.
- Valores de los parámetros de salida.
- Mensajes de error o advertencias.
A continuación se ofrece un fragmento de la estructura de respuesta SOAP que devuelve SQL Server después de ejecutar un procedimiento almacenado:
<?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>
Los resultados de una operación se encapsulan en el elemento <MethodNameResponse>
del cuerpo SOAP. El elemento <MethodNameResponse>
puede incluir los elementos secundarios siguientes:
<MethodNameResult>
incluye los resultados, los valores de recuento de filas, los mensajes de error y las advertencias.<OutputParameter>
incluye los parámetros de salida, si los hay, devueltos por los procedimientos almacenados.
Elemento <MethodNameResult>
Los resultados de una operación se devuelven en el elemento <MethodNameResult>, donde MethodName es el nombre de un procedimiento almacenado o una función definida por el usuario, o bien sqlbatch para las consultas de lotes ad hoc. sqlbatch es el método utilizado para ejecutar consultas ad hoc.
En el elemento <MethodNameResult>, los resultados se serializan del modo siguiente:
El resultado de una instrucción SELECT se encapsulan en un elemento <SqlRowSet>. Los resultados serializados en el elemento <SqlRowSet> utilizan el formato de serialización DiffGram. El formatoDiffGram se incluye en el componente DataSet de Microsoft .NET Framework. En ese caso, la respuesta también incluye un esquema XSD (si se crea el extremo con un esquema habilitado) antes de los datos. En el cliente Visual Studio 2005, los resultados se devuelven como objetos System.Data.DataSet.
[!NOTA] Para cargar los resultados SOAP en objetos System.Data.DataSet cuando se utiliza Visual Studio 2005, SQL Server 2005 debe incluir esquemas en línea en las respuestas SOAP que devuelve a los clientes. Este comportamiento se habilita para los extremos omitiendo la palabra clave SCHEMA o especificando SCHEMA=STANDARD cuando se crea el extremo. Para obtener más información, vea CREATE ENDPOINT (Transact-SQL).
El resultado de una instrucción SELECT... FOR XML se encapsula en un elemento <SqlXml>. Si se devuelven múltiples conjuntos de resultados (por ejemplo, un procedimiento almacenado con varias consultas SELECT...FOR XML), cada resultado se encapsulará en su propio elemento <SqlXml>. Asimismo, cada resultado irá seguido de un elemento <SqlRowCount>. Este elemento devuelve el número de filas afectadas por la consulta, tal como se muestra en el fragmento de respuesta siguiente:
<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>
Si la consulta SELECT... FOR XML solicita un esquema XSD especificando la opción XMLSCHEMA, se devolverá el esquema XSD como el primer elemento secundario del elemento <SqlXml>.
En el cliente Visual Studio 2005, los resultados se devuelven como objetos System.Xml.XmlElement.Los valores del código de retorno de procedimientos almacenados y funciones definidas por el usuario se encapsulan en un elemento <SqlResultCode>, tal como se muestra en el fragmento de respuesta siguiente:
<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>
En el cliente Visual Studio 2005, se devuelve el código de retorno como un objeto.
Los mensajes de error, las advertencias y otros mensajes informativos de SQL Server 2005 están dentro de un elemento <SqlMessage>, tal como se muestra en el fragmento de respuesta SOAP siguiente:
<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>
El fragmento de respuesta SOAP siguiente se obtiene al ejecutar el procedimiento almacenado GetCustomerInfo. Para obtener información acerca de este procedimiento almacenado, vea Enviar solicitudes de servicios Web XML nativos mediante aplicaciones de ejemplo. La primera instrucción INSERT incluida en el procedimiento almacenado provoca un error. Esto provoca la respuesta siguiente.
<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>
En el cliente Visual Studio 2005, estos resultados se devuelven como objetos de tipo SqlMessage.
Elemento <OutputParameter>
Cada valor de parámetro de salida se devuelve encapsulado en un elemento. El nombre del elemento es el del parámetro de salida. Tenga en cuenta que este elemento aparece después del elemento <MethodNameResult> como el último secundario del elemento <MethodNameResponse>, tal como se muestra en el fragmento de respuesta SOAP siguiente. Se devuelven dos parámetros de salida.
<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>
Vea también
Referencia
Enviar solicitudes SOAP mediante el cliente Visual Studio 2005 (C#)
Enviar solicitudes SOAP mediante el cliente de Visual Studio 2005 (Visual Basic)
Establecer el servidor para que escuche solicitudes de servicios Web XML nativos
Estructura de los mensajes de respuesta y solicitud SOAP
Directrices y limitaciones de los servicios Web XML nativos