Jak używać WSDL

126

Muszę korzystać z usługi sieci Web. Wysłali mi plik WSDL. Co powinienem zrobić, aby dodać go do mojej witryny i zacząć używać go jako proxy. (Jeśli umieszczę go w katalogu wirtualnym, można go znaleźć, ale czy zapewnia mi połączenie z prawdziwą usługą internetową?)

jmayor
źródło
9
Cóż, zagłosowałem za, ponieważ jest to pytanie, na które myślę, że inni użytkownicy tutaj skorzystaliby, gdyby zobaczyli odpowiedź. Szukałem dokładnie tego problemu i cieszę się, że znalazłem go tutaj.
schizoid04

Odpowiedzi:

138

Odpalałbym Visual Studio, tworzył projekt webowy (lub aplikację konsolową - nie ma znaczenia).

Dla .Net Standard:

  1. Kliknąłbym projekt prawym przyciskiem myszy i wybrałbym „Dodaj odwołanie do usługi” z menu kontekstowego Dodaj .
  2. Kliknąłbym Zaawansowane, a następnie kliknij Dodaj odniesienie do usługi.
  3. Otrzymałbym pełną ścieżkę do pliku wsdl i wkleiłbym w pasku adresu. Następnie wystrzel strzałę (przycisk start).
  4. Jeśli wystąpi błąd podczas próby załadowania pliku, musi istnieć uszkodzony i nierozwiązany adres URL, który plik musi rozwiązać, jak pokazano poniżej: wprowadź opis obrazu tutaj Zapoznaj się z tą odpowiedzią, aby dowiedzieć się, jak to naprawić: Odpowiedź Stackoverflow na: Nie można utworzyć odniesienia do usługi dla wsdl plik

Jeśli nie ma błędu, powinieneś po prostu ustawić Przestrzeń Nazw, której chcesz użyć, aby uzyskać dostęp do usługi, a zostanie ona wygenerowana za Ciebie.

W przypadku platformy .Net Core

  1. Kliknąłbym prawym przyciskiem myszy projekt i wybrałbym usługę połączoną z menu kontekstowego Dodaj.
  2. Wybrałbym z listy dostawcę usług internetowych Microsoft WCF.
  3. Nacisnąłbym Przeglądaj i od razu wybierz plik WSDL, Ustaw przestrzeń nazw i jestem gotowy do pracy. Jeśli napotkasz jakikolwiek błąd, zapoznaj się z powyższym adresem URL naprawy błędu.

Każda z powyższych metod spowoduje wygenerowanie prostego, bardzo podstawowego klienta WCF do użycia. W wygenerowanym kodzie należy znaleźć klasę „YourservicenameClient”.

W celach informacyjnych wygenerowany plik cs można znaleźć w swoim Obj / debug (lub release) / XsdGeneratedCode i nadal można znaleźć biblioteki dll w folderze TempPE.

Utworzone Usługi powinny mieć metody dla każdej metody zdefiniowanej w kontrakcie WSDL.

Utwórz wystąpienie klienta i wywołaj metody, które chcesz wywołać - to wszystko!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Jeśli potrzebujesz określić zdalny adres URL (nie używając tego utworzonego domyślnie), możesz to łatwo zrobić w konstruktorze klienta proxy:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

gdzie configNamejest nazwą punktu końcowego do użycia (użyjesz wszystkich ustawień oprócz adresu URL), a remoteURLjest ciągiem reprezentującym adres URL do połączenia (zamiast tego zawartego w konfiguracji).

marc_s
źródło
To działa dobrze. Tylko jedno pytanie, jeśli mam plik wsdl na swoim komputerze i dodaję odniesienie do tego pliku. Czy podczas wykonywania trafionego adresu URL jest to ten, który hostuje usługę internetową, czy muszę określić powiązanie i punkt końcowy?
jmayor
1
To zależy od Ciebie - domyślnie kod utworzony dla serwera proxy klienta będzie miał adres URL zawarty w WSDL - jeśli chcesz przejść do innego adresu URL, musisz go określić samodzielnie.
marc_s
Dlaczego to takie proste? Czy nie ma haczyka? : p Dzięki!
Odys
1
Jako zaakceptowaną odpowiedź dobrze by było, gdybyś wspomniał również o tym, jak używać WSDL hostowanego w sieci Web również z adresu URL.
Caltor
Myślę, że jestem już dość blisko, aby to zadziałało. Mam zainstalowaną usługę sieci Web za pomocą narzędzia Dodaj odwołanie do usługi. Jestem w stanie utworzyć wystąpienie klienta, ale wywołanie metod jest przyczyną niepowodzenia. Punkt końcowy używa implementacji Java i widzę tylko XML. Metoda, którą próbuję wywołać, szuka identyfikatora klienta i „czegoś innego”. To coś innego to klasa. Co jest zagadkowe. Mogę to umieścić w poście poniżej, jeśli to pomogłoby, ale jestem zaskoczony.
mappingman
45

W studiu wizualnym.

  • Utwórz lub otwórz projekt.
  • Kliknij projekt prawym przyciskiem myszy w eksploratorze rozwiązań.
  • Wybierz „Dodaj odniesienie do usługi”
  • Wklej adres z otrzymanym WSDL.
  • Kliknij OK.

Jeśli nie ma błędów, odwołanie do usługi powinno być widoczne w przeglądarce obiektów i wszystkich powiązanych metodach.

vidalsasoon
źródło
9
<3 Visual Studio .. Tak, to naprawdę takie proste :)
cwap
3
OP nie ma adresu, ale plik.
Henk Holterman,
1
Dostawca usługi sieci Web mógł wyłączyć WSDL (zabezpieczenie przez zaciemnienie), więc nie ma adresu URL, pod którym można uzyskać dostęp do WSDL, a następnie dodanie odwołania sieci Web w VS nie będzie działać. Jednak dostawca chce, aby TY (mam na myśli OP) wiedziałeś wszystko, co musisz wiedzieć o umowie serwisowej, dlatego wysłał plik WSDL. Teraz OP musi wygenerować z niego kod proxy, pytanie brzmi jak.
azheglov
3
Wpisując ścieżkę do pliku. Dlaczego myślisz, że to nie działa?
John Saunders,
1
Cześć @vidalsasoon. Czy mógłbyś krótko wyjaśnić, jak mam korzystać z tych klas, które widzę w moim eksploratorze klas. ?
CalZone
16

Użyj narzędzia WSDL.EXE, aby wygenerować serwer proxy usługi sieci Web z WSDL.

Otrzymasz długi plik źródłowy C #, który zawiera klasę, która wygląda następująco:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

W kodzie używającym usług sieci Web po stronie klienta:

  1. utworzyć wystąpienie MyService.
  2. ustawić swoją właściwość Url
  3. wywołać metody sieci Web
azheglov
źródło
5
Tworzy to
usługę sieciową
7

Jeśli chcesz dodać odwołanie wsdl do projektu .Net Core , nie ma opcji „Dodaj odwołanie do sieci WWW”.

Aby dodać odwołanie wsdl, przejdź do Eksploratora rozwiązań, kliknij prawym przyciskiem myszy element projektu References, a następnie kliknij opcję Dodaj połączoną usługę .

wprowadź opis obrazu tutaj

Następnie kliknij „Dokumentacja usługi sieci Web Microsoft WCF”:

wprowadź opis obrazu tutaj

Wprowadź ścieżkę do pliku w polu tekstowym URI i zaimportuj WSDL:

wprowadź opis obrazu tutaj

Wygeneruje prostego, bardzo podstawowego klienta WCF i użyjesz go mniej więcej tak:

YourServiceClient client = new YourServiceClient();
client.DoSomething();
Nedzad G.
źródło
To rozszerzenie się nie pojawia.
Rafael Pizao