Czym jest WSDL? Znaczenie i przykład
⚡ Inteligentne podsumowanie
WSDL (usługi internetowe Description Language) to plik oparty na XML, który informuje aplikację kliencką, co robi usługa sieciowa i jak ją wywołać. Ten materiał wyjaśnia strukturę WSDL, elementy, komunikaty, typy portów, powiązania oraz przykład publikacji.
Co to jest WSDL?
Web Services DescriptJęzyk jonowy (WSDL) to plik oparty na języku XML, który w zasadzie informuje aplikację kliencką, co robi usługa internetowa. Plik WSDL służy do opisania w skrócie działania usługi internetowej i dostarcza klientowi wszystkich informacji wymaganych do połączenia się z usługą sieciową i korzystania ze wszystkich funkcjonalności udostępnianych przez usługę sieciową.
W tym samouczku skupimy się na najważniejszej części usług sieciowych, czyli WSDL, czyli usługach sieciowych. DescriptJęzyk jonowy. Działa jakotracmiędzy usługą internetową a dowolnym klientem, który chce z niej skorzystać.
Struktura dokumentu WSDL
Dokument WSDL służy do opisu usługi sieciowej. Opis ten jest niezbędny, aby aplikacje klienckie mogły zrozumieć, co faktycznie robi usługa sieciowa.
- Plik WSDL zawiera lokalizację usługi sieciowej i
- Metody udostępniane przez usługę internetową.
Sam plik WSDL może wydawać się bardzo skomplikowany dla każdego użytkownika, ale zawiera wszystkie niezbędne informacje, których każda aplikacja kliencka potrzebuje do korzystania z odpowiedniej usługi sieciowej. Poniżej przedstawiono ogólną strukturę pliku WSDL:
- Definicja
- TargetPrzestrzeń nazw
- Typy danych
- Wiadomości
- Typ portu
- Wiązania
- Usługi
Ważną rzeczą, na którą należy tutaj zwrócić uwagę, jest definicja wiadomości, czyli to, co jest przekazywane przez protokół SOAP, jest faktycznie zdefiniowany w dokumencie WSDL. Dokument WSDL informuje aplikację kliencką o typach komunikatów SOAP wysyłanych i akceptowanych przez usługę internetową.
Innymi słowy, plik WSDL jest jak pocztówka zawierająca adres konkretnej lokalizacji. Adres zawiera szczegóły dotyczące miejsca, do którego wiadomość powinna zostać dostarczona. Zatem, w ten sam sposób, plik WSDL jest pocztówką zawierającą adres usługi sieciowej, która może zapewnić klientowi wszystkie potrzebne funkcjonalności.
<!-- WSDL definition structure --> <definitions name="Guru99Service" targetNamespace=http://example.org/math/ xmlns=http://schemas.xmlsoap.org/wsdl/> <!-- abstract definitions --> <types> ... <message> ... <portType> ... <!-- concrete definitions --> <binding> ... <service> ... </definition>
Poniżej znajduje się diagram struktury pliku WSDL.
Struktura WSDL
Elementy WSDL
Plik WSDL składa się z następujących głównych części:
- Tag służy do definiowania wszystkich złożonych typów danych, które będą używane w wiadomościach wymienianych między aplikacją kliencką a usługą sieciową. Jest to istotne, ponieważ jeśli usługa sieciowa obsługuje złożony typ danych, aplikacja kliencka powinna wiedzieć, jak go przetworzyć. Typy danych, takie jak float, liczby i ciągi znaków, to proste typy danych, ale usługa sieciowa może udostępniać ustrukturyzowane typy danych. Na przykład, może istnieć typ danych o nazwie EmployeeDataType, który może mieć 2 elementy o nazwach „EmployeeName” typu string i „EmployeeID” typu number lub integer. Razem tworzą one złożony typ danych.
- Tag służy do definiowania komunikatu wymienianego między aplikacją kliencką a serwerem WWW. Komunikaty te wyjaśniają operacje wejściowe i wyjściowe, które mogą być wykonywane przez usługę WWW. Przykładem komunikatu może być komunikat akceptujący identyfikator pracownika (EmployeeID), a komunikatem wyjściowym może być imię i nazwisko pracownika na podstawie podanego identyfikatora.
- tag jest używany do enkapsulacji każdej wiadomości wejściowej i wyjściowej w jedną logiczną operację. Tak więc może istnieć operacja o nazwie „GetEmployee”, która łączy wiadomość wejściową akceptującą EmployeeID z aplikacji klienckiej, a następnie wysyłającą EmployeeName jako wiadomość wyjściową.
- Tag służy do powiązania operacji z określonym typem portu. Dzięki temu, gdy aplikacja kliencka wywoła odpowiedni typ portu, będzie mogła uzyskać dostęp do operacji z nim powiązanych. Typy portów są jak interfejsy. Zatem, jeśli aplikacja kliencka musi skorzystać z usługi sieciowej, musi użyć informacji o powiązaniu, aby upewnić się, że może połączyć się z interfejsem udostępnianym przez tę usługę sieciową.
- Tag to nazwa nadana samej usłudze sieciowej. Początkowo, gdy aplikacja kliencka wywołuje usługę sieciową, wywołuje jej nazwę. Na przykład usługa sieciowa może znajdować się pod adresem takim jak http://localhost/.Guru99/Tutorial.asmx. Tag serwisowy będzie miał URL zdefiniowano, co informuje aplikację kliencką, że usługa internetowa jest dostępna w tej lokalizacji.
Dlaczego WSDL
Usługa sieciowa jest ważnym elementem w budowaniu współczesnych aplikacji internetowych. Jej głównym celem jest umożliwienie komunikacji między wieloma aplikacjami opartymi na różnych językach programowania. Na przykład, aplikacja internetowa .NET może komunikować się z Java aplikacji za pośrednictwem usługi internetowej.
Usługa internetowa ma następujące kluczowe cechy:
- Jest zbudowany z wykorzystaniem języka programowania XML. Prawie wszystkie współczesne technologie, takie jak .Net i Java mają odpowiednie polecenia, które mają możliwość pracy z XML. Dlatego też XML został uznany za najbardziej odpowiedni język do tworzenia usług sieciowych.
- Usługi sieciowe komunikują się przez HTTP. HTTP to protokół używany przez wszystkie aplikacje internetowe. Dlatego też logiczne było zapewnienie, aby usługi sieciowe również mogły działać w oparciu o protokół HTTP.
- Usługi sieciowe odpowiadają określonej specyfikacji językowej. Ta specyfikacja jest ustalana przez W3C, organ zarządzający wszystkimi standardami sieciowymi.
- Usługi internetowe mają język opisu znany jako WSDL, który jest używany do opisu usługi internetowej.
Plik WSDL jest napisany w zwykłym XML-u. Powodem, dla którego jest napisany w XML-u, jest to, że plik można odczytać w dowolnym języku programowania. Zatem gdyby aplikacja kliencka została napisana w .NET, zrozumiałaby plik XML. Podobnie, gdyby aplikacja kliencka została napisana w… Java języka programowania, wówczas będzie mógł także interpretować plik WSDL.
Plik WSDL spaja wszystko w całość. Z powyższego diagramu widać, że można utworzyć usługę sieciową w języku .NET. To właśnie tutaj usługa jest implementowana. Jeśli nie masz pliku WSDL i chcesz… Java Aby móc korzystać z usługi sieciowej, trzeba by było włożyć sporo pracy w kodowanie. Teraz jednak, dzięki plikowi WSDL, który jest w formacie XML i jest zrozumiały dla każdego języka programowania, można łatwo utworzyć Java klasa korzysta z usługi internetowej .Net. W związku z tym ilość wysiłku związanego z kodowaniem jest znacznie zmniejszona.
Część wiadomości WSDL
WSDL składa się z sekcji zwanej „wiadomościami”, która jest oznaczona przez Element. Ten element służy zasadniczo do opisu danych wymienianych między usługą internetową a aplikacją kliencką.
Każda usługa internetowa zawsze będzie miała 2 typy wiadomości:
- Jeden służy do wprowadzania danych usługi internetowej, a drugi do danych wyjściowych usługi internetowej.
- Dane wejściowe służą do opisania parametrów akceptowanych przez serwis WWW. Jest to ważny aspekt aplikacji klienckiej, ponieważ zna ona wartości, które mają zostać przesłane jako parametry do usługi internetowej.
- Innym typem komunikatu jest komunikat wyjściowy, który informuje, jakie wyniki dostarcza usługa internetowa.
Każda wiadomość z kolei będzie miała element używany do opisu parametru używanego przez komunikat wejściowy i wyjściowy.
Poniżej znajduje się prosty przykład komunikatu dla usługi sieciowej. Funkcjonalnością usługi sieciowej jest podanie nazwy „Samouczka” po przesłaniu „Identyfikatora samouczka” jako parametru do usługi sieciowej.
- Jak widać, usługa sieciowa ma 2 wiadomości: jedną dla danych wejściowych i drugą dla danych wyjściowych.
- Wiadomość wejściowa nosi nazwę TutorialNameRequest i ma jeden parametr o nazwie TutorialID. Parametr ten jest typu „liczba”, określonego przez typ xsd:number.
- Komunikat wyjściowy nosi nazwę TutorialNameResponse i ma jeden parametr o nazwie TutorialName. Parametr ten jest typu string, określonego przez typ xsd:string.
Powiązanie typu portu
Porty są używane w WSDL do definiowania jednej kompletnej operacji oferowanej przez usługę sieciową. W poprzednim temacie widzieliśmy, że nasza usługa sieciowa dostarcza 2 komunikaty: jeden dla danych wejściowych o nazwie „TutorialNameRequest”, a drugi dla danych wyjściowych o nazwie „TutorialNameResponse”. Łącznie komunikat wejściowy i wyjściowy tworzą tzw. jedną kompletną operację.
WSDL udostępnia element o nazwie który służy do definiowania operacji dostarczanych przez usługę internetową.
Tak więc w naszym powyższym przykładzie możemy zauważyć następujące rzeczy:
- Nazwa typu portu, który hermetyzuje operację, jest podana jako „Tutorial_PortType”.
- Samej operacji nadawana jest nazwa „Tutorial”. Zatem nasza operacja zasadniczo nadaje nazwę TutorialName, jeśli TutorialID zostanie podany jako parametr wejściowy.
- Następnie mamy 2 wiadomości, jedną dla wejścia i drugą dla wyjścia, które tworzą naszą operację.
Dodatkowo element, istnieje również element określający sposób przesyłania wiadomości.
- Powyższy przykład pokazuje, że powiązanie składa się z nazwy powiązania, która w naszym przypadku brzmi „TutorialSoapBinding”. Powiązanie, mówiąc najprościej, to informacja, której aplikacja kliencka używa do faktycznego powiązania się z usługą sieciową. Po powiązaniu się z usługą sieciową, aplikacja może wywoływać różne operacje udostępniane przez usługę sieciową.
- Warstwa transportowa jest określana jako http://, co oznacza, że wiadomości będą przesyłane za pomocą protokołu HTTP.
Tworzenie pliku WSDL
Plik WSDL jest tworzony za każdym razem, gdy usługa internetowa jest tworzona w dowolnym języku programowania. Ponieważ wygenerowanie pliku WSDL od podstaw jest dość skomplikowane, wszystkie edytory, takie jak Visual Studio dla platformy .NET i Eclipse dla Java automatycznie utworzy plik WSDL.
Poniżej znajduje się przykład pliku WSDL utworzonego w programie Visual Studio.
<?xml version="1.0"?> <definitions name="Tutorial" targetNamespace=http://Guru99.com/Tutorial.wsdl xmlns:tns=http://Guru99.com/Tutorial.wsdl xmlns:xsd1=http://Guru99.com/Tutorial.xsd xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace=http://Guru99.com/Tutorial.xsd xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TutorialNameRequest"> <complexType> <all> <element name="TutorialName" type="string"/> </all> </complexType> </element> <element name="TutorialIDRequest"> <complexType> <all> <element name="TutorialID" type="number"/> </all> </complexType> </element> </schema> </types> <message name="GetTutorialNameInput"> <part name="body" element="xsd1:TutorialIDRequest"/> </message> <message name="GetTutorialNameOutput"> <part name="body" element="xsd1:TutorialNameRequest"/> </message> <portType name="TutorialPortType"> <operation name="GetTutorialName"> <input message="tns:GetTutorialNameInput"/> <output message="tns:GetTutorialNameOutput"/> </operation> </portType> <binding name="TutorialSoapBinding" type="tns:TutorialPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTutorialName"> <soap:operation soapAction="http://Guru99.com/GetTutorialName"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="TutorialService"> <documentation>TutorialService</documentation> <port name="TutorialPort" binding="tns:TutorialSoapBinding"> <soap:address location="http://Guru99.com/Tutorial"/> </port> </service> </definitions>
Powyższy plik WSDL wygląda bardzo groźnie dla każdego użytkownika. Omówimy szczegółowo poszczególne jego części w kolejnych samouczkach, ale na razie przyjrzyjmy się w skrócie, co tak naprawdę robi każda sekcja pliku WSDL.
Publikowanie przykładu usługi internetowej
Przyjrzyjmy się teraz przykładowi, jak opublikować usługę internetową i z niej korzystać za pomocą programu Visual Studio. W tym przykładzie utworzymy usługę internetową z jedną metodą WebMethod. Metoda ta przyjmuje parametr typu Integer o nazwie „TutorialID”. Następnie metoda Web zwróci ciąg znaków o nazwie „Usługi internetowe”.
Następnie utworzymy aplikację konsolową, która będzie korzystać z tej usługi sieciowej i odpowiednio wywoływać naszą metodę sieciową. Przyjrzyjmy się krokom wymaganym do wykonania tego przykładu.
Krok 1) Pierwszym krokiem jest utworzenie usługi internetowej. Szczegółowe kroki, jak Asp.Net wyjaśniono, jak stworzono projekt internetowy i usługę internetową w tym miejscu. Wykonaj te same kroki, aby utworzyć projekt i usługę internetową. Kluczem jest wpisanie poniższego kodu do pliku usług internetowych.
namespace webservic_asmx { [WebService(Name = "Guru99 Web service")] public class TutorialService : System.Web.Services.WebService { [WebMethod] public string GetTutorialService(int TutorialID) { string TutorialName = "Web Services"; return TutorialName; } } }
Code Wyjaśnienie:
- Tutaj tworzymy metodę WebMethod o nazwie „Guru99WebService.” W tej metodzie internetowej uwzględniamy parametr całkowity, który musi zostać przekazany przy każdym wywołaniu tej metody internetowej.
- Następnie definiujemy zmienną o nazwie „TutorialName”, która będzie przechowywać wartość ciągu „Usługi sieciowe”. Jest to wartość, która zostanie zwrócona po wywołaniu usługi internetowej.
Krok 2) Po zdefiniowaniu pliku usług sieciowych, kolejnym krokiem jest utworzenie projektu klienta, który będzie korzystał z tej usługi sieciowej. Utwórzmy prostą aplikację konsolową, która będzie wywoływać tę usługę sieciową i wywoływać polecenie „Guru99WebService”, a następnie wyświetl wynik metody internetowej na ekranie dziennika konsoli. Wykonaj poniższe kroki, aby utworzyć aplikację konsolową. Kliknij prawym przyciskiem myszy plik rozwiązania programu Visual Studio i wybierz opcję Dodaj->Nowy projekt.
Krok 3) W tym etapie,
- Pamiętaj, aby najpierw wybrać opcję Visual C# Windows opcja. Następnie wybierz opcję utworzenia aplikacji konsolowej.
- Nadaj swojemu projektowi nazwę, która w naszym przypadku została podana jako „DemoApplication”.
Po kliknięciu przycisku OK na powyższym ekranie będziesz mógł zobaczyć projekt w Eksploratorze rozwiązań w programie Visual Studio.
Krok 4) W tym kroku ustawisz aplikację DemoApplication Console jako projekt startowy. Ma to na celu zapewnienie, że ta aplikacja zostanie uruchomiona jako pierwsza po uruchomieniu całego projektu Visual Studio. Ta aplikacja konsolowa z kolei wywoła usługę internetową, która zostanie automatycznie uruchomiona przez Visual Studio. Aby ukończyć ten krok, kliknij prawym przyciskiem myszy projekt DemoApplication i wybierz opcję „Ustaw jako projekt startowy”.
Krok 5) Następnym krokiem jest dodanie odniesienia do usługi naszego „Guru99Webservice” do naszej aplikacji konsolowej. Dzięki temu aplikacja DemoApplication może odwoływać się do usługi sieciowej i wszystkich jej metod. Aby to zrobić, kliknij prawym przyciskiem myszy plik projektu DemoApplication i wybierz opcję menu Dodaj->Odwołanie do usługi.
Krok 6) W tym kroku podajemy różne wartości wymagane do dodania odniesienia do usługi.
- Najpierw musimy wybrać opcję wyszukiwania. Ta opcja automatycznie pobierze plik WSDL dla naszej usługi internetowej TutorialService.
- Następnie powinniśmy nadać nazwę naszemu odwołaniu do usługi. W naszym przypadku nadajemy mu nazwę Guru99Usługa internetowa.
- Następnie musimy rozwinąć opcję TutorialService.asmx, aby po prawej stronie była widoczna metoda „GetTutorialService”. W tym przypadku TutorialService.asmx to nazwa naszego pliku Visual Studio .NET, który zawiera kod naszej usługi sieciowej.
- Następnie zobaczymy naszą metodę internetową, którą mieliśmy w naszej usłudze internetowej znanej jako „GetTutorialService”.
Po kliknięciu przycisku „OK” cały kod wymagany do uzyskania dostępu do tej usługi sieciowej zostanie dodany do naszej aplikacji DemoApplication Console, jak pokazano poniżej. Zrzut ekranu pokazuje, że „Guru„99Webservice” został pomyślnie dodany do naszej aplikacji konsolowej.
Krok 7) Następnym krokiem jest dodanie kodu do naszej aplikacji konsolowej, aby uzyskać dostęp do metody webowej w naszej usłudze sieciowej. Otwórz plik kodu Program.cs, który jest automatycznie dostarczany z aplikacją konsolową i dodaj poniższy kod.
namespace DemoApplication { class Program { static void Main(string[] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(1)); Console.ReadKey(); } } }
Code Wyjaśnienie:
- Pierwszym krokiem jest wybranie pliku Program.cs. Jest to główny plik tworzony przez program Visual Studio podczas tworzenia aplikacji konsolowej. To właśnie ten plik jest uruchamiany podczas uruchamiania aplikacji konsolowej (w naszym przypadku DemoApplication).
- Następnie tworzymy zmienną o nazwie „client”, która zostanie przypisana do instancji naszego odwołania do usługi utworzonego we wcześniejszym kroku. W naszym przypadku odwołanie do usługi to „Guru99Usługa internetowa.Guru99WebserviceSoapClient()'.
- Następnie wywołujemy naszą metodę internetową „GetTutorialService” w usłudze internetowej TutorialService. Pamiętaj, że nasza metoda GetTutorialService akceptuje parametr całkowity, więc po prostu przekazujemy go do metody internetowej.
- Ten ostatni wiersz służy jedynie do zapewnienia, że ekran dziennika konsoli pozostanie aktywny, abyśmy mogli wyświetlić dane wyjściowe. To polecenie będzie oczekiwać na dane wejściowe od użytkownika.
Wydajność
Po wykonaniu wszystkich powyższych kroków i uruchomieniu aplikacji DemoApplication zostanie wyświetlony poniższy wynik.
Z danych wyjściowych wyraźnie wynika, że DemoApplication wywołuje naszą usługę internetową i że ciąg zwrócony przez usługę internetową jest wyświetlany w dzienniku konsoli.
















