Crear proxy de servicio web en Visual Studio desde un archivo WSDL

101

Mi aplicación necesita comunicarse con un servicio web que no tiene una definición WSDL en línea. Sin embargo, los desarrolladores me proporcionaron 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 no parece funcionar sin un WSDL público.

¿Cómo genero el código para hablar con este servicio web usando este archivo WSDL?

Ana
fuente

Respuestas:

116

Intente usar WSDL.exe y luego incluya el archivo generado (.cs) en su proyecto.

Inicie el símbolo del sistema de Visual Studio (en Visual Studio / Tools en el menú de inicio) y luego escriba

>wsdl.exe [path To Your WSDL File]

Eso escupirá un archivo, que copiará / moverá e incluirá en su proyecto. Ese archivo contiene una clase que es un proxy para su servicio, inicie una instancia de esa clase y tendrá una propiedad de URL que puede configurar 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.

Andrew M
fuente
2
¡Gracias! Y puede usar el parámetro / o para la ruta del archivo exportado. por ejemplo,> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp
2
y, opcionalmente, agregue un espacio de nombres manualmente, que cubra todas las clases, para evitar conflictos con archivos similares generados.
Blue Clouds
138

Usar WSDL.exe no funcionó para mí (me dio un error sobre un tipo que faltaba), 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 pareció poder encontrar todos los tipos adecuados y agregó las clases directamente a mi proyecto.

jeffaudio
fuente
3
Enfrenté el mismo escenario y tu sugerencia me ahorró mucha frustración y probablemente algo de cabello. Se le ha dado una reputación bien merecida. (Como resultado indirecto, obtuviste +100 en todos los sitios :))
Shadow Wizard es Ear For You
Intenté esto, el archivo se 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
1
Probé esto desde una computadora de desarrollo que no tiene permiso para acceder al servicio web. A pesar de que el archivo .wsdl está en local, intentó conectar el servicio cuando presioné "Ir". Entonces no pude agregar una referencia. En esta situación, creo que debería preferirse la solución de Andrew M. Funcionó bien.
gkonuralp
@jeffaudio Estoy enfrentando un problema similar. Puedo agregar una referencia de servicio para el proyecto web, pero usando wsdl.exe no puedo generar un archivo proxy. cualquier sugerencia ..???
prakash r
15

En la nota al margen: si tiene todos los archivos localmente (no solo el archivo wsdl sino también los 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 todas las dependencias localmente y generar correctamente la clase de proxy.

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

Jarek Mazur
fuente
2

Hay un documento de Microsoft para crear suWCF proxy desde la línea de comandos.

Puede encontrar su copia local de wsdl.exeen una ubicación similar a esta: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( Obtenga más información aquí )

Al final, Commanddebería verse similar a esto:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl
Serj Sagan
fuente
1

guarde el archivo en su disco y luego use lo siguiente como URL:

file://your_path/your_file.wsdl
Evan Camilleri
fuente
Este es el único que funcionó para mí, ya que el archivo en cuestión debía descargarse primero después de la autenticación. ¡Gracias!
Kevin Radcliffe
-1

Dado que la verdadera URL de enlace para el servicio web se encuentra en el archivo, puede realizar estos sencillos pasos desde su máquina local:

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

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

2) En Visual Studio, haga clic derecho en su proyecto> Elija Agregar referencia web, se abrirá un cuadro de diálogo.

3) En el cuadro URL, copie la ubicación del archivo local sobre C: \ Documentos y configuración [usuario] \ Escritorio \ Webservice1.asmx, haga clic en Siguiente

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

5) ¡Listo! 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 Enlace

Israel Margulies
fuente
2
Esto ya se sugirió en esta respuesta existente, ¿por qué repetir?
Shadow Wizard es Ear For You
¿Por qué el archivo asmx cuando la pregunta es sobre wsdl?
Blue Clouds