Crear un proxy de servicio web XML

Por definición, los servicio 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. Dado 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 descrito a continuación en la tabla.

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, haciendo referencia a C#, Visual Basic .NET y JScript .NET, respectivamente. Identificador de idioma 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 para crear conteniendo 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, BeginAddyEndAdd. El método Add de la clase de proxy se utiliza para comunicar sincrónicamente con el método de servicio Web Add, pero BeginAdd y los métodos EndAdd se utilizan para comunicar de forma asincrónica con un método de servicio Web. Para obtener más información sobre cómo comunicar de forma asincrónica con métodos de servicio Web, vea Comunicando de forma asincrónica con Servicios web de 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 producirá una excepción. Para obtener detalles sobre cómo administrar las excepciones, vea Control y producción de excepciones en Servicios web de 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 de SOAP formateados en Documento, 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 queTargetNamespace para dos o más de las descripciones del servicio proporcionadas son idénticos. Cuando 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 servicio web creados con ASP.NET, se puede aplicar un atributo WebService que especifique una propiedad espacio de nombres única a la clase que implementa el servicio web. Esa propiedad espacio de nombres 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 queTargetNamespace 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, el TargetNamespace para cada esquema XML debe cambiar se a un URI único. La modificación exacta de TargetNamespace depende del origen de los esquemas XML determinados.

Consulte 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

Otros recursos

Crear clientes de servicios web XML

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.