2009-02-14 34 views
56

Tengo un archivo WSDL y estoy intentando crear un servicio web que se ajuste al WSDL.Crear un servicio web ASMX a partir de un archivo WSDL

He creado clientes que usan archivos WSDL que consumen un servicio existente, pero nunca he creado un servicio web que necesite seguir un WSDL específico.

He ido tan lejos como el uso:

wsdl.exe mywsdl.wsdl /l:VB /serverInterface

ahora tengo un archivo .vb generado a partir de que WSDL. Sin embargo, no estoy seguro de lo que se supone que debo hacer con este archivo VB. Parece que tiene una interfaz pública pero no una clase que implemente la interfaz. También tiene un montón de clases parciales para los tipos en WSDL.

Estaba esperando que haya algún tipo de trozo donde puse el código para completar las llamadas de servicio. Solo he creado servicios web simples anteriormente y ninguno de ellos usaba interfaces públicas, así que no estoy familiarizado con lo que está sucediendo aquí.

En este momento no estoy seguro de cómo uso el archivo .vb generado y lo hago funcionar con un archivo .asmx y qué codificación adicional es necesaria para completar la interfaz.

+0

@webdtc: gracias por esta pregunta, que era exactamente mi pregunta hoy, y lo respondí perfectamente. ¡Gracias de nuevo! –

+1

gracias, +1. El refrescador de sintaxis wsdl.exe y la respuesta subsiguiente me ahorraron mucho tiempo. –

Respuesta

33

Si ya ha creado interfaces, debe implementarlas.
Simplemente cree un nuevo servicio web y agregue la interfaz que generó para que herede esa interfaz. Visual Studio puede generar stubs automáticamente para cada método en la interfaz. Marcarlos con el atributo WebMethod y poner algún código que arrojará algunos datos/resultados de prueba.

Si tienes inteface (con algunas más atributos que se han generado de forma automática:


public interface IRealWebService 
{ 
    string GetName(); 

} 

Usted debe hacer un nuevo servicio:


public class WebTestService : System.Web.Services.WebService, IRealWebService 
{ 

    #region IRealWebService Members 

    [WebMethod] 
    public string GetName() 
    { 
     return "It Works !!!!"; 
    } 
    #endregion 
} 
+0

Gracias. Creo que es esto. ¡Entiendo lo que está sucediendo ahora! Tal vez debería haberlo hecho en C# primero. Tengo que d o en VB.net y todavía no estoy tan familiarizado con VB.net. Pero entiendo perfectamente tu ejemplo y puedo hacerlo en C#. – dtc

+0

Esto me consiguió una parte del camino allí. En .Net 4.0, también tuve que agregar [SoapDocumentService (RoutingStyle = SoapServiceRoutingStyle.RequestElement)] a mi clase y luego funcionó. Este sitio lo describe un poco más: http://gsmblog.com/post/Solving-problems-with-the-MS-header-SOAPAction.aspx. No sé si me ayudó, pero también eliminé todos los demás atributos de mi servicio web, como WebService, WebServiceBinding, System.ComponentModel.ToolboxItem y System.Web.Script.Services.ScriptService. –

+0

¿Alguien ha encontrado un wsdl que incluye un método que tiene una solicitud de objeto como parámetro y un objeto de respuesta como el tipo de devolución? –

4

Todo lo que necesita hacer es crear una clase que herede de la interfaz que WSDL.EXE ha generado, y luego implementar los métodos desde la interfaz.

Cuestiones relacionadas