Explicación detallada de WSDL en WebService

Explicación detallada de WSDL en WebService
Cuando alguien desarrolla WebService, especialmente cuando hay una interfaz con un tercero, usa el protocolo SOAP, y luego el usuario (o en segundo plano) le proporciona un archivo WSDL (o URL) y dice que se adapte de acuerdo a lo anterior. En este momento, es necesario tener una cierta comprensión de WSDL de WebService. Este artículo resumirá WSDL (WebService Description Language) en detalle.
WSDL (Lenguaje de descripción de servicios web, Lenguaje de descripción de servicios web) es una aplicación XML que define las descripciones de servicios web como un conjunto de puntos de acceso a servicios a través de los cuales los clientes pueden acceder a servicios que contienen información orientada a documentos o llamadas orientadas a procesos. llamada a procedimiento remoto). WSDL primero abstrae la operación de acceso y el mensaje de solicitud/respuesta utilizado durante el acceso, y luego lo vincula al protocolo de transporte y formato de mensaje específicos para finalmente definir el punto de acceso de servicio implementado específico. Los puntos de acceso de servicios desplegados específicos relacionados se convierten en servicios web abstractos a través de la combinación.

uno. El concepto básico de WSDL
WSDL es un documento que se utiliza para describir con precisión los servicios web, y un documento WSDL es un documento XML que sigue el esquema WSDL-XML. Un documento WSDL define un servicio web como una colección de puntos o puertos de acceso al servicio. En WSDL, las definiciones abstractas de los puntos de acceso al servicio y los mensajes se pueden reutilizar porque están separados de la implementación del servicio concreto o del enlace del formato de datos. El mensaje se refiere a una descripción abstracta de los datos intercambiados y el tipo de puerto se refiere a una colección abstracta de operaciones. Las especificaciones concretas de protocolo y formato de datos para tipos de puertos específicos constituyen enlaces reutilizables. Un puerto se define asociando una dirección de acceso web con un enlace reutilizable, y una colección de puertos se define como un servicio.
Un documento WSDL generalmente contiene 8 elementos importantes, a saber, definiciones, tipos, importación, mensaje, tipo de puerto, operación, enlace y elementos de servicio. Estos elementos están anidados dentro del elemento de definiciones, que es el elemento raíz del documento WSDL.
Diagrama de la estructura externa del documento WSDL:

Los elementos básicos con los que interactúan los servicios WSDL:
Tipos (tipos de mensajes): contenedores para definiciones de tipos de datos, utilizando algún tipo de sistema de tipos (como XSD).
Mensaje (message): La definición abstracta mecanografiada de datos de comunicación, que consta de una o más partes.
Parte: parámetro del mensaje
PortType (tipo de puerto): el protocolo específico y la especificación de formato de datos de un tipo de puerto específico. , que consta de una o más operaciones.
Operación: una descripción abstracta de las operaciones admitidas por el servicio. WSDL define cuatro operaciones:
1. Unidireccional: el extremo recibe información
3. Solicitud-respuesta: el extremo envía un mensaje y luego acepta los mensajes relevantes 4.
Notificación (notificación [2]): el punto final envía un mensaje.

Enlace: protocolo específico y especificación de formato de datos para un tipo de puerto específico.
Puerto: un punto final único definido como una combinación de enlace y dirección de red.
Servicio: una colección de puertos relacionados, incluidas sus interfaces asociadas, operaciones, mensajes, etc.
También puede haber múltiples capas dentro de la estructura exterior.

dos. Explicación detallada de la estructura básica de WSDL
A continuación se utiliza un documento wsdl para explicar la estructura de WSDL en detalle:

<?versión xml="1.0" codificación="UTF-8" ?>

<wsdl:definitions
targetNamespace=“http://com.liuxiang.xfireDemo/HelloService”
xmlns:tns=“http://com.liuxiang.xfireDemo/HelloService”
xmlns:wsdlsoap=“http://schemas.xmlsoap.org /wsdl/soap/”
xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
xmlns: soapenc11=“http://schemas.xmlsoap.org/soap/encoding/”
xmlns:soapenc12=“http://www.w3.org/2003/05/soap-encoding”
xmlns:soap11=“http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/”>
wsdl:types
<xsd:schema xmlns:xsd=“http://www.w3. org/2001/XMLSchema”
atributoFormDefault=“calificado” elementFormDefault=“calificado”
targetNamespace=“http://com.liuxiang.xfireDemo/HelloService”>
<xsd:element name=“sayHello”>
xsd:complexType
xsd:sequence
<xsd:element maxOccurs=“1” minOccurs=“1”
name=“name ” nillable=“true” type=“xsd:string” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=“sayHelloResponse”>
xsd:complexType
xsd:sequence
< xsd:elemento maxOccurs=“1” minOccurs=“0”
name=“return” nillable=“true” type=“xsd:string” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name=“sayHelloResponse”>
<wsdl:parte nombre=“parámetros” elemento=“tns:sayHelloResponse” />
</wsdl:mensaje>
<wsdl:mensaje nombre=“sayHelloRequest”>
<wsdl:parte nombre=“parámetros” elemento=“tns:sayHello” />
</wsdl:message>
<wsdl:portType name=“HelloServicePortType”>
<wsdl:operation name=“sayHello”>
<wsdl:input name=“sayHelloRequest”
message=“tns:sayHelloRequest” />
<wsdl:output name=“sayHelloResponse”
message=“tns:sayHelloResponse” />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name=“HelloServiceHttpBinding”
type=“tns:HelloServicePortType”>
<wsdlsoap:binding style=“ document”
transport=“http://schemas.xmlsoap.org/soap/http” />
<wsdl:operation name=“sayHello”>
<wsdlsoap:operation soapAction=“” />
<wsdl:input name=“sayHelloRequest”>
<wsdlsoap:body use=“literal” />
</wsdl:input>
<wsdl: salida nombre=“sayHelloResponse”>
<wsdlsoap:body use=“literal” />
</wsdl:salida>
</wsdl:operación>
</wsdl:binding>
<wsdl:servicio nombre=“HelloService”>
<wsdl:puerto name=“HelloServiceHttpPort”
binding=“tns:HelloServiceHttpBinding”>
<wsdlsoap:dirección
ubicación=“http://localhost:8080/xfire/services/HelloService” />
</wsdl:puerto>
</wsdl:servicio>
</ wsdl:definiciones>
1
2
3
4
5
6
7
8
9
10
11
12
13
14 15 16 17
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60













































61
62
63
64
65
66
67
68
69
(1) elemento de definiciones
El elemento raíz de todos los documentos WSDL es el elemento de definiciones. Este elemento encapsula todo el documento y proporciona un documento WSDL por su nombre. Aparte de proporcionar un espacio de nombres (targetNamespace), este elemento no tiene otra función, por lo que no se describirá en detalle.

(2) El elemento de tipos
WSDL adopta los tipos incorporados del Esquema XML W3C como su sistema de tipo básico. El elemento de tipos se utiliza como contenedor para definir varios tipos de datos que no se describen en los tipos integrados del esquema XML (no muy claro: varios tipos de datos que no se describen en los tipos integrados del esquema XML) . Al declarar la disponibilidad de las partes del mensaje, la definición del mensaje utiliza los tipos de datos y los elementos definidos en el elemento de tipos. Escriba definiciones en el documento WSDL para este artículo:

wsdl:types
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
atributoFormDefault=“calificado” elementFormDefault=“calificado”
targetNamespace=“http://com.liuxiang.xfireDemo/HelloService ”>
<xsd:element name=“sayHello”>
xsd:complexType
xsd:sequence
<xsd:element maxOccurs=“1” minOccurs=“1”
name=“name” nillable=“true” type=“xsd:string” / >
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=“sayHelloResponse”>
xsd:complexType
xsd:sequence
<xsd:element maxOccurs=“1” minOccurs=“0”
nombre =“return” nillable=“true” type=“xsd:cadena” />
</xsd:secuencia>
</xsd:tipocomplejo>
< / xsd : element> </ xsd
:schema>
</wsdl:types>
1
2
3
4
5
6
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Lo anterior es la parte de definición de datos, que define Dos elementos, uno es sayHello, el otro es sayHelloResponse: sayHello: define un tipo complejo, solo contiene una cadena simple, que se usará para describir la parte de entrada de la operación en el futuro; sayHelloResponse: define un tipo complejo, solo contiene a Una cadena simple, utilizada para describir el valor de retorno de la operación en el futuro; aquí sayHelloResponse está relacionado con sayHello, sayHello es relativo a un método, dentro: type="xsd:string", name="name", es para determinar el nombre entrante El parámetro es de tipo String, y el name="return" type="xsd:string" en sayHelloResponse es para determinar que el tipo devuelto por el método sayHello (String name) es de tipo String.


















(3) El elemento de importación
El elemento de importación permite utilizar los elementos de definición en el espacio de nombres especificado en otros documentos WSDL en el documento WSDL actual. El elemento de importación no se utiliza en este ejemplo. Esta función suele ser útil cuando los usuarios desean modularizar documentos WSDL.
El formato de importación es el siguiente:

<wsdl:import namespace="http://xxx.xxx.xxx/xxx/xxx" location="http://xxx.xxx.xxx/xxx/xxx.wsdl"/>
1
debe tener un atributo de espacio de nombres y un atributo de ubicación :
1.atributo de espacio de nombres: el valor debe coincidir con el espacio de nombres de destino declarado en el documento WSDL que se está importando;
2.atributo de ubicación: debe apuntar a un documento WSDL real y el documento no puede estar vacío.

(4) elemento de mensaje
El elemento de mensaje describe la carga útil del mensaje utilizado por el servicio web. El elemento del mensaje puede describir la carga útil del mensaje de salida o recibido; también puede describir el contenido del encabezado del archivo SOAP y el elemento de detalle del error. La forma en que se define el elemento del mensaje depende de si se utiliza la mensajería de estilo RPC o de documento. En la definición del elemento de mensaje en este documento, este documento utiliza mensajes de estilo de documento:

<wsdl:mensaje nombre="sayHelloResponse">
<wsdl:parte nombre="parámetros" elemento="tns:sayHelloResponse" />
</wsdl:mensaje>
<wsdl:mensaje nombre="sayHelloRequest">
<wsdl:parte nombre= "parameters" element="tns:sayHello" />
</wsdl:message>
1
2
3
4
5
6
Esta parte es la definición abstracta del formato del mensaje: se definen dos mensajes sayHelloResponse y sayHelloRequest:

1. sayHelloRequest:
el formato de mensaje de solicitud de la operación sayHello se compone de un fragmento de mensaje, parámetros con nombre y los elementos son los elementos en los tipos que definimos anteriormente;

2. sayHelloResponse:
el formato del mensaje de respuesta de la operación sayHello consiste en un fragmento de mensaje llamado parámetros, y el elemento es un elemento en los tipos que definimos anteriormente, si se
usa mensajería de estilo RPC, solo el elemento elemento en el documento necesita ser modificado para escribir (??).

(5) elemento portType
El elemento portType define la interfaz abstracta del servicio web. La interfaz es algo similar a la interfaz de Java, que define un tipo y método abstractos sin definir la implementación. En WSDL, el elemento portType se implementa mediante los elementos de enlace y servicio, que se utilizan para describir el protocolo de Internet, el esquema de codificación y la dirección de Internet utilizados por la implementación del servicio web.
Se pueden definir múltiples operaciones en un tipo de puerto, y una operación se puede considerar como un método.La definición del documento WSDL en este artículo:

<wsdl:portType name="HelloServicePortType">
<wsdl:operation name="sayHello">
<wsdl:input name="sayHelloRequest"
message="tns:sayHelloRequest" />
<wsdl:output name="sayHelloResponse"
message=" tns:sayHelloResponse” />
</wsdl:operation>
</wsdl:portType>
1
2
3
4
5
6
7
8
portType define el tipo de modo de llamada de servicio, que contiene un método de operación sayHello e incluye entrada y salida para indicar el La operación es un patrón de solicitud/respuesta, el mensaje de solicitud es sayHelloRequest definido anteriormente y el mensaje de respuesta es sayHelloResponse definido anteriormente. La entrada representa la carga útil que se pasa al servicio web y el mensaje de salida representa la carga útil que se pasa al cliente.
Esto es equivalente a definir un método abstracto sayHello en la clase abstracta, y la definición de los parámetros del método y el valor devuelto se establecen en tipos, y el nombre del método se define en el mensaje.

(6) enlace
El elemento de enlace asigna un tipo de puerto abstracto a un conjunto de protocolos concretos (SOAO y HTTP), estilos de mensajería y estilos de codificación. Por lo general, el elemento vinculante se usa junto con elementos específicos del protocolo, ejemplos en este artículo:

<wsdl:binding name=“HelloServiceHttpBinding”
type=“tns:HelloServicePortType”>
<wsdlsoap:binding style=“document”
transport=“http://schemas.xmlsoap.org/soap/http” />
<wsdl:operación nombre =“sayHello”>
<wsdlsoap:operación soapAction=“” />
<wsdl:input name=“sayHelloRequest”>
<wsdlsoap:body use=“literal” />
</wsdl:input>
<wsdl:output name=“sayHelloResponse ”>
<wsdlsoap:body use=“literal” />
</wsdl:salida>
</wsdl:operación>
</wsdl:vinculante >
1
2
3
4
5
6 7 8 9 10 11 12 13 14








Esta parte vincula la definición abstracta de punto de acceso al servicio con SOAP y HTTP, y describe cómo acceder a la entrada de acceso implementada de acuerdo con el tipo de punto de entrada de acceso descrito anteriormente a través de SOAP/HTTP.
Estipula que la soapAction que se debe usar es "xxx" en la llamada SOAP específica, esta Acción es muy importante en la llamada del código WebService. El uso específico debe referirse a los elementos definidos por el protocolo específico.

(7) elemento de servicio y elemento de puerto
El elemento de servicio contiene uno o más elementos de puerto, donde cada elemento de puerto representa un servicio web diferente. El elemento de puerto asigna una URL a un enlace específico, e incluso es posible que dos o más elementos de puerto asignen URL diferentes al mismo enlace. Ejemplo de los documentos:

<wsdl:service name="HelloService">
    <wsdl:port name="HelloServiceHttpPort"
        binding="tns:HelloServiceHttpBinding">
        <wsdlsoap:address
            location="http://localhost:8080/xfire/services/HelloService" />
    </wsdl:port>
</wsdl:service>

1
2
3
4
5
6
7
Para el estudio de este documento WSDL, la primera vez que lo vi, me sentí muy extraño, y hay muchos elementos en él. Para aprender, primero debe comprender el significado y la función de la estructura externa , y luego comprender los elementos internos. Significado y función, algunos elementos tienen poco efecto, algunos elementos están muy relacionados y algunos elementos son más importantes.
Diagrama WSDL:

—————————————————
Declaración de derechos de autor: este artículo es un artículo original del blogger de CSDN "Zheng Rong life", siguiendo el acuerdo de derechos de autor CC 4.0 BY-SA, adjunte la fuente original enlace y esta declaración.
Enlace original: https://blog.csdn.net/wenzhi20102321/article/details/68486526

Supongo que te gusta

Origin blog.csdn.net/weixin_44659084/article/details/130217332
Recomendado
Clasificación