Cómo usar un archivo WSDL para crear un servicio WCF (no hacer una llamada)

100

Tengo un archivo WSDL antiguo y quiero crear un servidor basado en este archivo WSDL.

El WSDL se genera a partir de un ASMX (supongo, pero no estoy seguro).

Cómo puedo conseguir esto ?


pregunta original donde el OP pensó que necesitaba crear un cliente basado en WSDL.

Raha
fuente

Respuestas:

112

Con svcutil, puede crear interfaces y clases (contratos de datos) a partir del WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Esto creará un archivo llamado "your.cs" en C # (o "your.vb" en VB.NET) que contiene todos los elementos necesarios.

Ahora, necesita crear una clase "MyService" que implementará la interfaz de servicio (IServiceInterface) - o las diversas interfaces de servicio - y esta es su instancia de servidor.

Ahora bien, una clase por sí sola todavía no ayuda: necesitará alojar el servicio en algún lugar. Debe crear su propia instancia de ServiceHost que aloje el servicio, configurar puntos finales, etc., o puede alojar su servicio dentro de IIS.

marc_s
fuente
Intenté lo mismo con svcutil, pero realmente no tuve éxito con las fallas. ¿Quizás tiene algunas sugerencias para mi problema: goo.gl/dlen
Juri
15
"svcutil your.wsdl your.xsd" es lo que necesitaba para que el mío funcionara. ¡Gracias!
Tim Lewis
3
Consulte esta respuesta SO para obtener información sobre cómo descargar wsdl y xsd en un formato que le gustará a svcutil. stackoverflow.com/questions/286657/…
Brett Widmeier
@marc_s Cuando uso esto con mi archivo WSDL, parece cambiar el nombre de algunos elementos de una manera muy extraña, de modo que las solicitudes que ingresan a mi servidor ni siquiera serían aceptadas. ¿Esto es normal?
Arj
@Arjun: no, parece que necesita reunir todos los datos relevantes y hacer una pregunta en Stackoverflow. :-)
marc_s
41

Existen buenos recursos si sabe qué buscar. Pruebe "Contrato primero" y WCF. o "WSDL First" y WCF.

He aquí una selección:

Cheeso
fuente
3
Para cualquiera que siga la descripción general básica del artículo WSDL-First : tome nota del comentario del que habla ReplyAction="*". Parece que necesitas deshacerte de eso. Hay un rastro de explicaciones de ese comentario que da el razonamiento, pero no lo he leído.
dan-gph
30

Utilice svcutil.exe con el /scconmutador para generar los contratos WCF. Esto creará un archivo de código que puede agregar a su proyecto. Contendrá todas las interfaces y tipos de datos que necesita para crear su servicio. Cambie la ubicación de salida usando el /ointerruptor, o puede encontrar el archivo en la carpeta donde ejecutó svcutil.exe. El idioma predeterminado es C #, pero creo que (nunca lo he probado) debería poder cambiar esto usando /l:vb.

svcutil /sc "WSDL file path"

Si su WSDL tiene archivos XSD compatibles, páselos como argumentos después del WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Luego, cree una nueva clase que sea su servicio e implemente la interfaz de contrato que acaba de crear.

Dennis Calla
fuente
7

Puede usar svcutil.exe para generar código de cliente. Esto incluiría la definición del contrato de servicio y cualquier contrato de datos y contratos de fallas requeridos.

Luego, simplemente elimine el código del cliente: clases que implementan los contratos de servicio. Luego, deberá implementarlos usted mismo, en su servicio.

John Saunders
fuente
4

Con la herramienta "Agregar referencia de servicio" en Visual Studio, puede insertar la dirección como:

archivo: ///path/to/wsdl/file.wsdl

Y se cargará correctamente.

Vagner Gon
fuente