Utwórz serwer proxy usługi sieci Web w programie Visual Studio z pliku WSDL

102

Moja aplikacja musi komunikować się z usługą sieciową, która nie ma definicji WSDL online. Deweloperzy dostarczyli mi jednak plik WSDL.

Z publicznym WSDL Visual Studio może wygenerować ten kod za pomocą kreatora Service Reference. Ale wydaje się, że nie działa bez publicznego WSDL.

Jak wygenerować kod do komunikacji z tą usługą sieci Web przy użyciu tego pliku WSDL?

Anne
źródło

Odpowiedzi:

116

Spróbuj użyć WSDL.exe, a następnie dołącz wygenerowany plik (.cs) do projektu.

Uruchom wiersz polecenia programu Visual Studio (w obszarze Visual studio / narzędzia w menu Start), a następnie wpisz

>wsdl.exe [path To Your WSDL File]

To wypluje plik, który kopiujesz / przenosisz i dołączasz do swojego projektu. Ten plik zawiera klasę, która jest serwerem proxy dla twojej usługi. Uruchom instancję tej klasy i będzie miał właściwość adresu URL, którą możesz ustawić w locie, i kilka metod, które możesz wywołać. Będzie również generować klasy dla wszystkich / dowolnych złożonych obiektów przekazywanych przez interfejs usługi.

Andrew M.
źródło
2
Dzięki! I możesz użyć parametru / o dla ścieżki eksportowanego pliku. np.> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp
2
i opcjonalnie dodaj ręcznie przestrzeń nazw, obejmującą wszystkie klasy, aby zapobiec konfliktom z podobnymi wygenerowanymi plikami.
Blue Clouds
139

Użycie WSDL.exe nie zadziałało (pokazał mi błąd dotyczący brakującego typu), ale udało mi się kliknąć prawym przyciskiem myszy projekt w programie VS i wybrać opcję „Dodaj odwołanie do usługi”. Wpisałem ścieżkę do pliku wsdl w polu Adres i nacisnąłem „Idź”. Wydawało się, że udało się znaleźć wszystkie odpowiednie typy i dodać klasy bezpośrednio do mojego projektu.

jeffaudio
źródło
3
W obliczu tego samego scenariusza i twoja sugestia zaoszczędziła mi wielu frustracji i prawdopodobnie trochę włosów. Otrzymałeś zasłużoną reputację. (W wyniku pośrednim masz +100 na wszystkich stronach :))
Shadow Wizard is Ear For You
Próbowałem tego, plik importuje, ale nie widzę w moim kodzie klas
guiomie
1
Wypróbowałem tę metodę przy użyciu MSVC 2015, ale odmówiła przetwarzania pliku wsdl za pomocą adresu URL. Więc użyłem metody opisanej przez Andrew M.
Hermanna
1
Próbowałem tego na komputerze deweloperskim, który nie ma uprawnień dostępu do usługi sieciowej. Pomimo, że plik .wsdl jest w wersji lokalnej, próbował połączyć się z usługą, kiedy kliknąłem „Go”. Nie mogłem więc dodać odniesienia. W tej sytuacji uważam, że powinno być preferowane rozwiązanie Andrew M. Działało dobrze.
gkonuralp
@jeffaudio im w obliczu podobnego problemu Mogę dodać odwołanie do usługi dla projektu internetowego, ale używając wsdl.exe im nie jest w stanie wygenerować pliku proxy. jakieś sugestie ..???
prakash r
15

Na marginesie: jeśli masz wszystkie pliki lokalnie (nie tylko plik wsdl, ale także pliki xsd), możesz wywołać wsdl.exe w ten sposób:

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl]

W ten sposób wsdl.exe może lokalnie rozwiązać wszystkie zależności i poprawnie generuje klasę proxy.

Może to komuś zaoszczędzi trochę czasu - rozwiązuje błąd „brakujący typ”, gdy usługa nie jest dostępna online.

Jarek Mazur
źródło
4

Istnieje dokument Microsoft Doc do tworzenia WCFserwera proxy z wiersza poleceń.

Możesz znaleźć lokalną kopię programu wsdl.exew lokalizacji podobnej do tej: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( Dowiedz się więcej tutaj )

W końcu Twój Commandpowinien wyglądać podobnie do tego:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl
Serj Sagan
źródło
3

Wypróbuj narzędzie klasy WSDL To Proxy dostarczane z zestawem .NET Framework SDK. Nigdy wcześniej go nie używałem, ale z pewnością wygląda na to, czego potrzebujesz.

Steve Danner
źródło
1

zapisz plik na dysku, a następnie użyj następującego adresu jako adresu URL:

file://your_path/your_file.wsdl
Evan Camilleri
źródło
Jest to jedyny, który działał dla mnie, ponieważ plik, o którym mowa, musiał zostać najpierw pobrany po uwierzytelnieniu. Dzięki!
Kevin Radcliffe
-1

Ponieważ prawdziwy adres URL powiązania usługi sieci Web znajduje się w pliku, możesz wykonać te proste kroki na komputerze lokalnym:

1) Zapisz plik na komputerze lokalnym, na przykład:

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx

2) W programie Visual Studio kliknij prawym przyciskiem myszy projekt> wybierz opcję Dodaj odwołanie do sieci Web, otworzy się okno dialogowe.

3) W polu adresu URL Skopiuj lokalną lokalizację pliku powyżej C: \ Documents and Settings [użytkownik] \ Desktop \ Webservice1.asmx, kliknij przycisk Dalej

4) Teraz pojawią się funkcje, wybierz swoją nazwę dla odniesienia, kliknij dodaj odniesienie

5) Gotowe! możesz zacząć używać go jako przestrzeni nazw w swojej aplikacji nie martw się, że użyłeś pliku lokalnego, bo i tak prawdziwy adres URL dla usługi znajduje się w pliku w sekcji Binding

Israel Margulies
źródło
2
To było już sugerowane w tej istniejącej odpowiedzi, dlaczego powtarzać?
Shadow Wizard is Ear For You
Dlaczego plik asmx, gdy pytanie dotyczy wsdl?
Blue Clouds