Crear un proxy de servicio web XML
Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.
Por definición, los servicios Web se pueden comunicar a través de una red utilizando los protocolos estándar de la industria, incluso SOAP. Es decir, un cliente y un servicio Web se comunican utilizando mensajes SOAP, que encapsulan los parámetros dentro y fuera como XML. Afortunadamente, para los clientes de servicios Web, la clase de proxy administra el trabajo de asignar los parámetros a los elementos XML y enviar a continuación el mensaje SOAP a través de la red.
Con tal de que una descripción del servicio exista, se puede generar una clase de proxy si la descripción del servicio cumple con el lenguaje de descripción de servicios Web (WSDL). Una descripción del servicio define cómo comunicar con un servicio Web. Con una descripción del servicio, una clase de proxy se puede crear con la herramienta Wsdl.exe. A su vez, un cliente de servicios Web puede invocar a continuación los métodos de la clase de proxy, que comunican con un servicio Web a través de la red procesando los mensajes SOAP enviados a y del servicio Web. Puesto que la clase de proxy comunica a través de Internet con el servicio Web, es una idea buena para comprobar que la propiedad Url de la clase de proxy hace referencia a un destino confiable.
De forma predeterminada, la clase de proxy utiliza SOAP sobre Http para comunicar con el servicio Web. Sin embargo, Wsdl.exe puede generar las clases de proxy para comunicar con un servicio Web, utilizando el protocolo HTTP-GET o el protocolo HTTP-POST. Para especificar que la clase de proxy debería utilizar HTTP-GET o HTTP-POST, proporcione el modificador de /protocolo a la herramienta Wsdl.exe, como se describe en la tabla siguiente.
Utilizar Wsdl.exe para generar una clase de proxy del Servicio web de XML
Puede utilizar la herramienta lenguaje de descripción de servicios Web (Wsdl.exe) de un símbolo del sistema para crear una clase de proxy, especificando (en un mínimo) la dirección URL a un servicio Web o una descripción del servicio, o la ruta de acceso a una descripción del servicio guardada.
Wsdl /language:language /protocol:protocol /namespace:myNameSpace /out:filename /username:username /password:password /domain:domain <url or path>
Nota: |
---|
Los argumentos enumerados aquí son los argumentos normalmente utilizados para Wsdl.exe. Para obtener información completa sobre la sintaxis de Wsdl.exe, vea Herramienta de lenguaje de descripción de servicios Web (Wsdl.exe). |
Parámetro | Valor |
---|---|
<url o ruta de acceso> |
Una dirección URL o ruta de acceso a una descripción del servicio (un archivo que describe un servicio Web en lenguaje de descripción de servicios Web). Si especifica un archivo, proporcione un archivo que contenga la descripción del servicio. Por ejemplo: mywebservice.wsdl Si especifica una dirección URL, la dirección URL debe hacer referencia una página .asmx o devolver una descripción del servicio. Para los servicios Web creados con ASP.NET, ¿se puede devolver una descripción del servicio anexando WSDL a la dirección URL del servicio Web. Por ejemplo: https://www.contoso.com/MyWebService.asmx?WSDL. |
/language:lenguaje |
El lenguaje en el que está generada la clase de proxy. Las opciones disponibles incluyen CS, VBy JS, que hacen referencia a C#, Visual Basic .NET y JScript .NET, respectivamente. El lenguaje predeterminado es C#. (Opcional) |
/protocol:protocolo |
El protocolo comunicaba con los métodos de servicio Web. Las opciones disponibles incluyen SOAP, HTTP-GET y HTTP-POST. El protocolo predeterminado es SOAP. (Opcional) |
/namespace:myNameSpace |
Espacio de nombres del proxy generado. La opción predeterminada es el espacio de nombres global. (Opcional) |
/out:nombre de archivo |
El nombre del archivo que se va a crear y que contiene la clase de proxy. El nombre predeterminado está basado en el nombre de la clase que implementa el servicio Web. (Opcional) |
/username:nombre de usuario |
El nombre de usuario que se utiliza para conectarse a un servidor web que requiera autenticación. (Opcional) |
/password: contraseña |
La contraseña que se utiliza para conectarse a un servidor web que requiera autenticación. (Opcional) |
/domain:dominio |
El dominio que se utiliza para conectarse a un servidor web que requiera autenticación. (Opcional) |
Detalles de la clase de proxy generada
Cuando Wsdl.exe se utiliza para generar una clase de proxy, un archivo de código fuente único se genera en el lenguaje especificado. Este archivo contiene una clase de proxy que expone ambos métodos, sincrónicos y asincrónicos, para cada método de servicio Web del servicio Web. Por ejemplo, si un servicio Web contiene un método de servicio Web denominado Add
, la clase de proxy tiene los métodos siguientes para llamar al método de servicio Web Add
: Add
, BeginAdd
**, y EndAdd
. El método Add
de la clase de proxy se utiliza para comunicarse con el método de servicio Web Add
de forma sincrónica, pero los métodos BeginAdd
y EndAdd
se utilizan para comunicarse con el método de servicio Web de forma asincrónica. Para obtener más información sobre cómo comunicarse con los métodos de servicio Web de forma asincrónica, vea Comunicar de forma asincrónica con los servicios Web XML.
Cada método de la clase de proxy generada contiene el código adecuado para comunicar con el método de servicio Web. Si se produce un error durante la comunicación con el servicio Web y la clase de proxy, se produce una excepción. Para obtener más información sobre cómo administrar las excepciones, vea Controlar y generar excepciones en servicios Web XML.
El orden de parámetro puede diferir entre el orden definido en el método de servicio Web y el método asociado de la clase de proxy. En la mayoría de los casos, el orden de parámetro coincidirá. Sin embargo, si el servicio Web espera mensajes SOAP con formato Document, hay un caso donde el orden de parámetro no coincidirá. Si un método de servicio Web tiene parámetros out definidos antes que un parámetro in, los parámetros out se colocan todos después de los parámetros in en la clase de proxy. Por ejemplo, en el ejemplo de código siguiente, MyWebMethod
del método de servicio Web tiene el parámetro out outStr
declarado antes que el parámetro in inStr
. Sin embargo, en la clase de proxy, el parámetro inStr
se declara antes de outStr
.
' Declare MyWebMethod in the Web service.
MyWebMethod(ByRef outStr As String, inStr As String)
' This is the corresponding MyWebMethod in the proxy class.
MyWebMethod(inStr As String, ByRef outStr As String)
// Declare MyWebMethod in the Web service.
MyWebMethod(out string outStr, string inStr)
// This is the corresponding MyWebMethod in the proxy class.
MyWebMethod(string inStr, out string outStr).
En algunos casos, la clase de proxy generada por Wsdl.exe utiliza un menor enfoque del común denominador para convertir los objetos a un tipo especificado en una descripción del servicio. Como consecuencia, es posible que el tipo generado en la clase de proxy no sea el que desea o espera el programador. Por ejemplo, cuando Wsdl.exe encuentra un tipo ArrayList en una descripción de servicio, crea una matriz Objeto en la clase de proxy generada. Para garantizar que las conversiones de tipo de objeto sean correctas, abra el archivo que contiene la clase de proxy generada y cambie los tipos de objeto incorrectos al tipo de objeto esperado.
Advertencias iniciadas por Wsdl.exe
Al proporcionar varias descripciones del servicio a Wsdl.exe, dos de los mensajes de error que podrían aparecer son lo siguientes:
Advertencia: Omisión de la descripción del servicio duplicada con TargetNamespace =<espacio de nombres de esquema> de <URI de esquema de ubicación>.
Indica que TargetNamespace para dos o más de las descripciones del servicio proporcionadas son idénticos. Dado que se supone que TargetNamespace es un identificador único para un documento XML determinado, que en este caso es una descripción del servicio, Wsdl.exe supone que las dos descripciones del servicio son idénticas. Para hacer esto, Wsdl.exe construye simplemente una clase de proxy para una de las descripciones del servicio. Si éste no es su resultado intencional, puede modificarlo. Para las descripciones del servicio que representan los servicios Web creados con ASP.NET, se puede aplicar un atributo WebService que especifique una propiedad Namespace única a la clase que implementa el servicio Web. Esa propiedad Namespace se utiliza a continuación como TargetNamespace en la descripción del servicio para identificar singularmente el servicio Web.
Advertencia: Omisión del esquema duplicado con TargetNamespace =<espacio de nombres de esquema> de <URI de esquema de ubicación>.
Indica que TargetNamespace para dos o más de los esquemas XML en las descripciones del servicio proporcionadas son idénticos. Dado que se supone que TargetNamespace es un identificador único para un documento XML determinado, que en este caso es el esquema XML, Wsdl.exe supone que los dos esquemas XML son idénticos. Para hacer esto, Wsdl.exe construye una clase para simplemente uno de los esquemas. Si éste no es el resultado intencional, TargetNamespace para cada esquema XML debe cambiarse a un URI único. La modificación exacta de TargetNamespace depende del origen de los esquemas XML determinados.
Vea también
Tareas
Cómo: Explorar servicios web XML existente creados con ASP.NET
Cómo: Tener acceso a servicios web XML desde un explorador
Conceptos
Generar clientes de servicios web XML
Descubrimiento de servicios web
Comunicar de forma asincrónica con servicios web XML