2009-02-14 11 views
56

Mam plik WSDL i próbuję utworzyć usługę sieci Web zgodną z WSDL.Tworzenie usługi sieciowej ASMX z pliku WSDL

Utworzyłem klientów przy użyciu plików WSDL, które pobierają istniejącą usługę, ale nigdy nie utworzyłem usługi internetowej, która wymagałaby zastosowania określonego WSDL.

Poszedłem miarę używając:

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

Teraz mam plik .vb wygenerowany z tego WSDL. Jednak nie jestem pewien, co mam zrobić z tym plikiem VB. Wygląda na to, że ma tam publiczny interfejs, ale nie ma klasy, która implementuje interfejs. Ma również grupę klas częściowych dla typów w WSDL.

Spodziewałem się, że będzie jakiś skrót, w którym wstawiam kod, aby wykonać połączenia serwisowe. Stworzyłem już tylko proste usługi sieciowe i żadne z nich nie korzystało z publicznych interfejsów, więc nie mam pojęcia, co się tutaj dzieje.

W tym momencie nie jestem pewien, w jaki sposób używam wygenerowanego pliku .vb i czy działa z plikiem .asmx i jakie dodatkowe kodowanie jest potrzebne do ukończenia interfejsu.

+0

@webdtc: Dziękuję za to pytanie, to było dokładnie moje pytanie dziś, i odpowiedział na to doskonale Dziękuję raz jeszcze! ​​ –

+1

dzięki, +1. Odświeżanie składni wsdl.exe i późniejsza odpowiedź zaoszczędziły mi dużo czasu –

Odpowiedz

33

Jeśli już utworzyłeś interfejsy, musisz wdrożyć te interfejsy.
Wystarczy utworzyć nową usługę internetową i dodać wygenerowany interfejs, aby dziedziczył ten interfejs. Visual Studio może automatycznie generować kody pośrednie dla każdej metody w interfejsie. Oznacz je za pomocą atrybutu WebMethod i dodaj kod, który zwróci niektóre dane testowe/wyniki.

Jeśli masz inteface (z pewnymi więcej atrybutów, które zostały automatycznie generowanych:


public interface IRealWebService 
{ 
    string GetName(); 

} 

Należy dokonać nowa usługa:


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

    #region IRealWebService Members 

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

Dziękuję, myślę, że to jest to, rozumiem, co się dzieje teraz! Może powinienem był zrobić to w C# najpierw o to w VB.net i jeszcze nie jestem zaznajomiony z VB.net. Ale doskonale rozumiem twój przykład i jestem w stanie to zrobić w języku C#. – dtc

+0

To sprawiło, że byłem częścią drogi. W .Net 4.0, musiałem także dodać [SoapDocumentService (RoutingStyle = SoapServiceRoutingStyle.RequestElement)] do mojej klasy, a następnie zadziałało. Ta strona opisuje to nieco więcej: http://gsmblog.com/post/Solving-problems-with-the-MS-header-SOAPAction.aspx. Nie wiem, czy to pomogło, ale usunąłem także wszystkie inne atrybuty z mojego serwisu internetowego, takie jak WebService, WebServiceBinding, System.ComponentModel.ToolboxItem i System.Web.Script.Services.ScriptService. –

+0

Czy ktoś napotkał plik wsdl, który zawiera metodę, która ma żądanie obiektu jako parametr, a obiekt odpowiedzi jako typ zwracany? –

4

Wszystko, co musisz zrobić, to stworzyć klasę dziedziczącą po interfejsie wygenerowanym przez WSDL.EXE, a następnie zaimplementować metody z poziomu interfejsu.