2010-11-29 25 views
91

Mi aplicación necesita hablar con un servicio web que no tiene una definición de WSDL en línea. Sin embargo, los desarrolladores me proporcionaron un archivo WSDL.Crear proxy de servicio web en Visual Studio desde un archivo WSDL

Con un WSDL público, Visual Studio puede generar este código para mí utilizando el asistente de referencia de servicio. Pero parece que no funciona sin un WSDL público.

¿Cómo puedo generar el código para hablar con este servicio web utilizando este archivo WSDL?

Respuesta

104

Pruebe usar WSDL.exe y luego incluir el archivo generado (.cs) en su proyecto.

fuego hasta la línea de comandos de Visual Studio (bajo Visual Studio/herramientas en el menú de inicio) a continuación, escriba

>wsdl.exe [path To Your WSDL File] 

Eso va a escupir un archivo, que permite copiar/mover e incluir en su proyecto. Ese archivo contiene una clase que es un proxy para su servicio, activa una instancia de esa clase, y tendrá una propiedad de URL que puede establecer sobre la marcha, y un montón de métodos que puede llamar. También generará clases para todos/cualquier objeto complejo pasado a través de la interfaz de servicio.

+2

Gracias!Y puede usar el parámetro/o para la ruta del archivo exportado. p. > wsdl.exe http://www.example.com/service.wsdl/o: C: \ Users \ X \ Desktop – gkon

3

Pruebe el WSDL To Proxy class tool incluido con .NET Framework SDK. Nunca lo he usado antes, pero sin duda se parece a lo que necesita.

120

El uso de WSDL.exe no funcionó para mí (me dio un error sobre el tipo faltante), pero pude hacer clic derecho en mi proyecto en VS y seleccionar "Agregar referencia de servicio". Ingresé la ruta al archivo wsdl en el campo Dirección y presioné "Ir". Eso parecía ser capaz de encontrar todos los tipos adecuados y agregar las clases directamente a mi proyecto.

+3

Enfrentado al mismo escenario y su sugerencia me salvó un montón de frustración y, probablemente, un poco de pelo. Un representante bien merecido se te ha dado. (Como resultado indirecto, obtuviste +100 en todos los sitios :)) –

+0

Intenté esto, el archivo importa, pero no puedo ver en mi código las clases – guiomie

+1

Probé este método usando MSVC 2015 pero se negó a procesar el archivo wsdl usando URL . Así que utilicé el método descrito por Andrew M. – Hermann

0

Dado que la verdadera URL de unión para el servicio web se encuentra en el archivo, se podría hacer estos sencillos pasos desde su máquina local:

1) Guarde el archivo en su ordenador local, por ejemplo:

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx 

2) En Visual Studio, haga clic con el botón derecho en su proyecto> Elegir Agregar referencia web, se abrirá un cuadro de diálogo.

3) En el cuadro de URL Copiar la ubicación de archivos local por encima de C: \ Documents and Settings [usuario] \ Desktop \ Webservice1.asmx, Haga clic en Siguiente

4) Ahora verá aparecer las funciones, elija su nombre para la referencia, haga clic en Agregar referencia

5) ¡Ya ha terminado! puede comenzar a usarlo como un espacio de nombres en su aplicación, no se preocupe si usó un archivo local, porque de todos modos la verdadera URL del servicio se encuentra en el archivo en la sección de enlace

+2

Esto ya se sugirió en [esta respuesta existente] (http://stackoverflow.com/a/14360303/447356) ¿por qué repetir? –

13

En la nota lateral: si tener todo de los archivos localmente (no solo archivo WSDL, sino también archivos XSD) puede invocar wsdl.exe de esa manera:

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl] 

de esa manera wsdl.exe puede resolver todos los dependecies a nivel local y genera correctamente clase de proxy .

Tal vez le ahorrará tiempo a alguien: resuelve el error de "tipo faltante" cuando el servicio no está disponible en línea.

Cuestiones relacionadas