2009-02-14 28 views
56

Ho un file WSDL e sto cercando di creare un servizio Web conforme al WSDL.Creare un servizio Web ASMX da un file WSDL

Ho creato client che utilizzano file WSDL che consumano un servizio esistente, ma non ho mai creato un servizio Web necessario per seguire un WSDL specifico.

Sono andato per quanto utilizzando:

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

ora ho un file VB generato da quel WSDL. Tuttavia non sono sicuro di cosa dovrei fare con questo file VB. Sembra che abbia un'interfaccia pubblica, ma nessuna classe che implementa l'interfaccia. Ha anche un sacco di classi parziali per i tipi nel WSDL.

Mi aspettavo che ci fosse una sorta di stub in cui inserivo il codice per completare le chiamate di servizio. Ho creato solo servizi web semplici e nessuno di loro ha utilizzato interfacce pubbliche, quindi non ho familiarità con ciò che sta accadendo qui.

A questo punto non sono sicuro di come utilizzare il file .vb generato e farlo funzionare con un file .asmx e quale ulteriore codifica è necessaria per completare l'interfaccia.

+0

@webdtc: grazie per questa domanda, era esattamente la mia domanda oggi, e ha risposto perfettamente.Grazie ancora! –

+1

grazie, 1. L'aggiornamento della sintassi wsdl.exe e la successiva risposta mi hanno salvato un sacco di tempo –

risposta

33

Se sono già state create interfacce, è necessario implementare tali interfacce.
È sufficiente creare un nuovo servizio Web e aggiungere l'interfaccia generata in modo che erediti tale interfaccia. Visual Studio può generare automaticamente stub per ogni metodo nell'interfaccia. Contrassegnali con l'attributo WebMethod e inserisci del codice che restituirà alcuni dati/risultati di test.

Se hai inteface (con alcune più attributi che sono stati generati automaticamente:


public interface IRealWebService 
{ 
    string GetName(); 

} 

Si dovrebbe fare il nuovo servizio:


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

    #region IRealWebService Members 

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

Grazie, penso che sia così. Capisco cosa sta succedendo ora! Forse avrei dovuto farlo in C# prima. Devo d o in VB.net e non ho ancora familiarità con VB.net. Ma capisco perfettamente il tuo esempio e sono in grado di farlo in C#. – dtc

+0

Questo mi ha fatto parte del modo in cui ci sono. In .Net 4.0, ho dovuto aggiungere anche [SoapDocumentService (RoutingStyle = SoapServiceRoutingStyle.RequestElement)] alla mia classe e poi ha funzionato. Questo sito lo descrive un po 'di più: http://gsmblog.com/post/Solving-problems-with-the-MS-header-SOAPAction.aspx. Non so se sia stato utile, ma ho rimosso anche tutti gli altri attributi dal mio webservice, come WebService, WebServiceBinding, System.ComponentModel.ToolboxItem e System.Web.Script.Services.ScriptService. –

+0

Qualcuno si imbatte in una wsdl che include un metodo che ha una richiesta oggetto come parametro e un oggetto risposta come tipo di ritorno? –

4

Tutto ciò che dovete fare è creare una classe che erediti dall'interfaccia generata da WSDL.EXE e quindi implementare i metodi dall'interfaccia.

Problemi correlati