Share via


Estructura de los mensajes de solicitud SOAP

Si desea que el cliente SOAP genere sus propias solicitudes SOAP en lugar de utilizar las clases proxy proporcionadas por Visual Studio 2005, debe usar los siguientes formatos de mensaje.

Formato de los mensajes de solicitud SOAP para procedimientos almacenados y tipos definidos por el usuario

En el siguiente ejemplo se muestra una solicitud SOAP típica enviada a una instancia de SQL Server 2005. En el mensaje SOAP, se solicita la operación GetCustomerInfo. Tenga en cuenta que sólo se muestra un fragmento del encabezado HTTP.

POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 350
SoapAction: http://tempUri.org/GetCustomerInfo
...

<?xml version="1.0" encoding="utf-8" ?> 
<soap:Envelope 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
   <GetCustomerInfo xmlns="http://tempUri.org/">
<CustomerID>1</CustomerID> 
<OutputParam /> 
  </GetCustomerInfo>
</soap:Body>
</soap:Envelope>

Encabezado HTTP

En el código anterior, el valor del campo del encabezado HTTP SoapAction es el nombre del método precedido por su espacio de nombres. Este valor es el mismo método y espacio de nombres que ha agregado al extremo creado utilizando CREATE ENDPOINT. Tenga en cuenta que es un campo opcional. El encabezado HTTP Hostidentifica el servidor al que se envía la solicitud HTTP.

Elemento <soap:Envelope>

Los detalles de una solicitud SOAP se incluyen en el elemento <Body> de SOAP ENVELOPE. En el ejemplo anterior se solicita el método GetCustomerInfo. El atributo xmlns de <GetCustomerInfo> es el mismo espacio de nombres que se especifica para este método que ha creado el extremo utilizando CREATE ENDPOINT. Para obtener más información acerca del procedimiento almacenado y el espacio de nombres, vea Enviar solicitudes de servicios Web XML nativos mediante aplicaciones de ejemplo. Los siguientes parámetros de método se pasan como elementos secundarios del elemento <GetCustomerInfo>:

  • El elemento <CustomerID> que tiene el valor 1 es el parámetro de entrada
  • El elemento <OutputParam> es el parámetro de salida.

Procesar parámetros de entrada

Los parámetros de entrada se procesan de las formas siguientes:

  • Si un método SOAP requiere un parámetro de entrada y ese parámetro no se incluye en la solicitud SOAP, no se pasa ningún valor al procedimiento almacenado al que se llama. Se produce la acción predeterminada definida en el procedimiento almacenado.

  • Si un método SOAP requiere un parámetro de entrada y ese parámetro se incluye en la solicitud pero no se le asigna ningún valor, el parámetro se pasa al procedimiento almacenado con una cadena vacía como valor. Tenga en cuenta que no es NULL.

  • Si una operación SOAP requiere un parámetro de entrada y si desea enviar un valor NULL para ese parámetro, debe establecer un atributo xsi:nil como "true" en la solicitud SOAP. Por ejemplo:

    <GetCustomerInfo xmlns="http://tempUri.org/" >
      <CustomerID xsi:nil="true" />
      <OutputParam />
    </GetCustomerInfo>
    

    En Visual Studio 2005, cuando se pasan valores NULL a las variables de la cadena, se genera el atributo xsi:nil="true" en la solicitud SOAP. Pero cuando se pasan valores NULL para parámetros de tipos como integer y float (tipos de valores), Visual Studio 2005 no genera el atributo xsi:nil="true"; en su lugar, proporciona valores predeterminados para esos parámetros; por ejemplo, 0 para tipos integer, 0,0 para tipos float, etc. Por lo tanto, si desea pasar valores NULL a esos tipos de parámetros, debe generar el mensaje SOAP en su aplicación utilizando el atributo xsi:nil="true". Para obtener más información, vea Directrices y limitaciones de los servicios Web XML nativos.

  • Puede proporcionar varios aspectos en los parámetros. En una tabla que se muestra más adelante en este tema, se enumeran los diversos aspectos que puede especificar cuando solicite consultas SQL ad hoc. En esta tabla, todos los aspectos que puede especificar para un nodo <Value> se pueden especificar en los nodos de parámetros del método RPC.

Formato de los mensajes de solicitud SOAP cuando se solicitan consultas SQL ad hoc

Cuando se envía una solicitud SOAP para ejecuciones de consultas SQL ad hoc, se debe llamar al método sqlbatch y pasar las consultas y los parámetros que sean necesarios.

En el siguiente ejemplo de solicitud HTTP SOAP se llama al método sqlbatch. Tenga en cuenta que sólo se muestra un fragmento del encabezado HTTP.

POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 656
SoapAction: https://schemas.microsoft.com/sqlserver/2004/SOAPsqlbatch
...

<?xml version="1.0" encoding="utf-8" ?> 
 <soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
 <sqlbatch xmlns="https://schemas.microsoft.com/sqlserver/2004/SOAP">
<BatchCommands>
SELECT EmployeeID, FirstName, LastName 
FROM Employee 
WHERE EmployeeID=@x 
FOR XML AUTO;
</BatchCommands> 
<Parameters>
   <SqlParameter Name="x" SqlDbType="Int" MaxLength="20" 
   xmlns="https://schemas.microsoft.com/SQLServer/
    2001/12/SOAP/types/SqlParameter">
  <Value xsi:type="xsd:string">1</Value> 
   </SqlParameter>
</Parameters>
  </sqlbatch>
  </soap:Body>
  </soap:Envelope>

Encabezado HTTP

En el encabezado HTTP, tenga en cuenta que el valor del campo del encabezado HTTP SoapAction es el nombre del método (sqlbatch) que el cliente utiliza para especificar consultas SQL. Tenga en cuenta que el encabezado es opcional.

Elemento <soap:Envelope>

Los detalles de la solicitud SOAP aparecen en el elemento <Body>. El elemento <Body> de SOAP sólo tiene un elemento secundario (<sqlbatch>) que identifica el método solicitado. La operación sqlbatch se define en el espacio de nombres identificado en el elemento. Este elemento tiene los siguientes elementos secundarios:

  • El elemento <BatchCommands> especifica la consulta o las consultas separadas por punto y coma (;) que se van a ejecutar.
  • El elemento <Parameters> proporciona una lista opcional de parámetros. En el anterior ejemplo de sobre de solicitud, sólo se pasa un parámetro a la consulta. Cada parámetro se agrega al mensaje SOAP como un elemento secundario <SqlParameter> del elemento <Parameters>. Al pasar los parámetros, debe pasar como mínimo el nombre del parámetro (atributo Name del elemento <SqlParameter>) y el valor del parámetro (elemento secundario <Value> del elemento <SqlParameter>).

Para evitar conversiones no esperadas, proporcione tanta información sobre los parámetros como pueda. En la tabla siguiente se enumeran los aspectos de parámetros adicionales que se pueden especificar para el elemento <SqlParameter>. También puede especificar algunas de estos aspectos para el elemento <Value>.

Para los aspectos que se pueden especificar en los elementos <SqlParameter> y <Value>, cuando especifique el elemento <Value>, los aspectos deben estar en el espacio de nombres https://schemas.microsoft.com/sqlserver/2004/sqltypes, como se muestra en el siguiente ejemplo:

<Value xsi:type="xsd:string" sqltypes:maxLength="100" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes">1</Value>
Especto del parámetro Comentario Se puede especificar en el nodo

direction

Especifica la dirección del parámetro (Input, InputOutput). Input es el valor predeterminado.

<SqlParameter>

localeID

Define la configuración regional de Windows para la intercalación de los tipos de caracteres. Equivalente al valor del LCID devuelto por COLLATIONPROPERTY intrínseco.

<SqlParameter>

<Value>

maxLength

El atributo del elemento <SqlParameter> proporciona la máxima longitud del valor del parámetro. El valor predeterminado es 1.

<SqlParameter>

<Value>

name

El atributo del elemento <SqlParameter> proporciona el nombre del parámetro.

<SqlParameter>

outputRequested

Se puede aplicar a los elementos del parámetro para indicar si se debe emitir la salida. El comportamiento predeterminado depende del parameterMode que se utilice, si es explícito o el valor predeterminado.

Si el atributo se establece en "true" en un parámetro de entrada, generará un error.

<Value>

precision

El atributo del elemento <SqlParameter> proporciona la precisión del valor del parámetro. El valor predeterminado es 18.

<SqlParameter>

<Value>

scale

El atributo del elemento <SqlParameter> proporciona la escala del valor del parámetro. El valor predeterminado es 0.

<SqlParameter>

<Value>

sqlCompareOptions

Define las opciones de comparación que se utilizarán para la intercalación de los tipos de caracteres. Es una enumeración de los valores que se pueden combinar que coincide con el valor de ComparisonStyle devuelto por el COLLATIONPROPERTY intrínseco.

<SqlParameter><Value>

sqlDbType

Especifica el tipo de parámetro. Para obtener una lista de los tipos de datos del sistema SQL Server 2005 que puede especificar, vea Asignaciones de tipos de datos de los servicios Web XML nativos.

<SqlParameter>

typeName

Se utiliza para especificar los argumentos de tipos definidos por el usuario. typeName debe contener el nombre de tres partes.

<SqlParameter>

<Value>

useDefaultValue

Indica que se debe usar un valor predeterminado para un parámetro, el elemento del parámetro se puede omitir de la lista o, de forma alternativa, se puede especificar el atributo Booleano useDefaultValue con un valor de "true". El valor predeterminado del atributo es "false" si el elemento se incluye y "true" si el elemento se omite.

<SqlParameter>

<Value>

XmlNamespace

Especifica el espacio de nombres del esquema XML asociado al parámetro de tipo xml.

<SqlParameter>

<Value>

xsi:type

Especifica el tipo de valor. Para obtener más información acerca de como el aspecto xsi:type se asigna a tipos de datos del sistema SQL Server 2005, vea Asignaciones de tipos de datos de los servicios Web XML nativos.

<Value>

Vea también

Referencia

Estructura de los mensajes de respuesta y solicitud SOAP
Encabezados de extensión SOAP
Estructura de los mensajes de respuesta SOAP
Estructura de los mensajes de error SOAP
Espacios de nombres utilizados en solicitudes y respuestas SOAP

Ayuda e información

Obtener ayuda sobre SQL Server 2005