Jak używać pliku WSDL do tworzenia usługi WCF (bez wykonywania połączenia)

100

Mam stary plik WSDL i chcę utworzyć serwer na podstawie tego pliku WSDL.

WSDL jest generowany z ASMX (przypuszczam, ale nie jestem pewien).

Jak mogę to osiągnąć?


oryginalne pytanie, w którym OP pomyślał, że powinien stworzyć klienta opartego na WSDL.

Raha
źródło

Odpowiedzi:

112

Używając svcutil, możesz tworzyć interfejsy i klasy (kontrakty danych) z WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Spowoduje to utworzenie pliku o nazwie „your.cs” w C # (lub „your.vb” w VB.NET), który zawiera wszystkie niezbędne elementy.

Teraz musisz utworzyć klasę „MyService”, która zaimplementuje interfejs usługi (IServiceInterface) - lub kilka interfejsów usług - i to jest Twoja instancja serwera.

Sama klasa jeszcze nie pomaga - musisz gdzieś hostować usługę. Musisz albo utworzyć własne wystąpienie ServiceHost, które obsługuje usługę, skonfigurować punkty końcowe itd. - lub możesz hostować swoją usługę w usługach IIS.

marc_s
źródło
Próbowałem tego samego z svcutilem, ale nie udało mi się to z błędami. Czy może macie jakieś sugestie dotyczące mojego problemu: goo.gl/dlen
Juri
15
„svcutil your.wsdl your.xsd” jest tym, czego potrzebowałem, aby mój działał! dzięki!
Tim Lewis
3
Sprawdź tę odpowiedź SO, aby uzyskać informacje na temat pobierania wsdl i xsd w formacie, który spodoba się svcutil. stackoverflow.com/questions/286657/…
Brett Widmeier
@marc_s Kiedy używam tego z moim plikiem WSDL, wydaje się, że zmienia nazwy niektórych elementów w bardzo dziwny sposób, tak że żądania przychodzące do mojego serwera nie byłyby nawet akceptowane. Czy to normalne?
Arj
@Arjun: nie - wygląda na to, że musisz zebrać wszystkie istotne fakty i zadać pytanie na Stackoverflow! :-)
marc_s
41

Istnieją dobre zasoby, jeśli wiesz, czego szukać. Wypróbuj „Najpierw kontrakt” i WCF. lub „WSDL First” i WCF.

Oto wybór:

Ser
źródło
3
Dla każdego, kto śledzi Podstawowy przegląd artykułu WSDL-First : Zwróć uwagę na komentarz, o którym mowa ReplyAction="*". Wygląda na to, że musisz się tego pozbyć. Istnieje ciąg wyjaśnień z tego komentarza, który daje uzasadnienie, ale go nie czytałem.
dan-gph
30

Użyj svcutil. Exe z /scprzełącznikiem, aby wygenerować kontrakty WCF. Spowoduje to utworzenie pliku kodu, który można dodać do projektu. Będzie zawierał wszystkie interfejsy i typy danych potrzebne do utworzenia usługi. Zmień lokalizację wyjściową za pomocą /oprzełącznika lub możesz znaleźć plik w folderze, w którym uruchomiono svcutil.exe. Domyślnym językiem jest C #, ale myślę (nigdy tego nie próbowałem), powinieneś móc to zmienić za pomocą /l:vb.

svcutil /sc "WSDL file path"

Jeśli twój WSDL ma jakieś wspierające pliki XSD, przekaż je jako argumenty po WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Następnie utwórz nową klasę, która jest Twoją usługą, i zaimplementuj właśnie utworzony interfejs kontraktu.

Dennis Calla
źródło
7

Możesz użyć svcutil.exe do wygenerowania kodu klienta. Obejmuje to definicję umowy o świadczenie usług oraz wszelkich wymaganych umów dotyczących danych i umów dotyczących błędów.

Następnie po prostu usuń kod klienta: klasy, które implementują kontrakty usług. Będziesz wtedy musiał sam je wdrożyć w swojej służbie.

John Saunders
źródło
4

Korzystając z narzędzia „Dodaj odwołanie do usługi” w programie Visual Studio, możesz wstawić adres jako:

file: ///path/to/wsdl/file.wsdl

I załaduje się poprawnie.

Vagner Gon
źródło