
Ahora que ya sabes cómo definir los tipos de datos que se usan en un servicio web, el siguiente paso es indicar cómo se agrupan esos tipos para formar los parámetros de entrada y de salida. Veámoslo con un ejemplo. Siguiendo con los usuarios que acabamos de definir, podríamos crear en el servicio web una función getUsuario()
para dar acceso a los datos de un usuario. Como parámetro de entrada de esa función vamos a pedir el "id"
del usuario, y como valor de salida se obtendrá un objeto "usuario"
. Por tanto, debemos definir los siguientes mensajes:
<message name="getUsuarioRequest">
<part name="id" type="xsd:int"/>
</message>
<message name="getUsuarioResponse">
<part name="getUsuarioReturn" type="tns:usuario"/>
</message>
Como ves, normalmente por cada función del servicio web se crea un mensaje para los parámetros de entrada, y otro para los de salida. Dentro de cada mensaje, se incluirán tantos elementos part
como sea necesario. Cada mensaje contendrá un atributo name
que debe ser único para todos los elementos de este tipo. Además, es aconsejable que el nombre del mensaje con los parámetros de entrada acabe en Request
, y el correspondiente a los parámetros de salida en Response
.

En un documento WSDL
podemos especificar dos estilos de enlazado: document
o RPC
. La selección que hagamos influirá en cómo se transmitan los mensajes dentro de las peticiones y respuestas SOAP
. Por ejemplo, un mensaje SOAP
con estilo document
podría ser:
<SOAP-ENV:Body>
<producto>
<codigo>KSTMSDHC8GB</codigo>
</producto>
</SOAP-ENV:Body>
Y un mensaje con estilo RPC
sería por ejemplo:
<SOAP-ENV:Body>
<ns1:getPVP>
<param0 xsi:type="xsd:string">KSTMSDHC8GB</param0>
</ns1:getPVP>
</SOAP-ENV:Body>
El estilo de enlazado RPC
está más orientado a sistemas de petición y respuesta que el document
(más orientado a la transmisión de documentos en formato XML
). En este estilo de enlazado, cada elemento message
de WSDL
debe contener un elemento part
por cada parámetro (de entrada o de salida), y dentro de éste indicar el tipo de datos del parámetro mediante un atributo type
, como se muestra en el ejemplo anterior.
Además, cada estilo de enlazado puede ser de tipo encoded
o literal
(aunque en realidad la combinación document/encoded
no se utiliza). Al indicar encoded
, estamos diciendo que vamos a usar un conjunto de reglas de codificación, como las que se incluyen en el propio protocolo SOAP
(espacio de nombres "http://schemas.xmlsoap.org/soap/encoding/"
), para convertir en XML
los parámetros de las peticiones y respuestas.
El ejemplo anterior de RPC
es en realidad RPC/encoded
. Un ejemplo de un mensaje SOAP
con estilo RPC/literal
sería:
<SOAP-ENV:Body>
<ns1:getPVP>
<param0>KSTMSDHC8GB</param0>
</ns1:getPVP>
</SOAP-ENV:Body>
En lo sucesivo, trabajaremos únicamente con estilo de enlazado RPC/encoded
.