Keserves WSDL kezdetek
June 19th, 2008
Úgy mondják minden kezdet nehéz, különösen igaz ez, ha saját WSDL fájl
megírására szánjuk rá magunkat. Hiába csinálunk mindent a specifikáció
szerint, megeshet, hogy validálási hiba lép fel.
Ennek az oka az, hogy létezik egy WS-I (Web Service Interoperability Organization) szervezet, amely a webszolgáltatások együttműküdésének
zökkenőmentesítését tűzte ki célul. Ezt a célt a WS-I a már meglévő specifikációk finomításával éri el. Egyik ilyen dokumentuma a WS-I Basic Profile.
A WS-I Basic Profile a WSDL specifikációját tovább szűkíti, azaz nem minden megengedett, amit egyébként a WSDL specifikációja megenget.
Lássunk rá egy konkrét példát. Vizsgáljuk meg a következő WSDl fájlt. Jól formázott, és a WSDL sémának is megfelel.
Ráadásul ha PHP-vel használjuk (PHP-ben írodott klienssel és kiszolgálóval), még működik is.
Ha azonban .NET ügyfélprogramot írunk, és azzal próbáljuk a webszolgáltatást használni, hibába ütközünk.
A WSDL.exe sémafordító az alábbi hibajelentést írja ki:
Warning: This web reference does not conform to WS-I Basic Profile v1.1.
R2204: A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute.
- Part ‘name’ of message ‘SayHelloRequest’ from service description with targetNamespace=’urn:service.wsdl’.
- Part ‘return’ of message ‘SayHelloResponse’ from service description with targetNamespace=’urn:service.wsdl’.
A WSDL specifikáció a part elemet így definiálja:
<part name="nmtoken"
</message>
A part elemnek
A WSDL specifikáció nem szabja meg, hogy melyik attribútumot használjuk, így a WSDL dokumentumunk egy érvényes WSDL dokumentum.
A dokumentumunk azonban nem felel meg a WS-I Basic Profile-nak. A WS-I Basic Profile ugyanis előirja, hogy a part elemnek kötelezően
az element attribútumot kell használnia, ha közvetlen literális XML kódolást használunk (a SOAP üzenet formátumának stílusát a soap:binding elem style
attribútuma határozza meg). A WSDL dokumentumban RPC stílus helyett dokumentum stílust használunk (az adat literális XML adatként lesz elküldve),
ezért a WSDL fájl nem felel meg a WS-I Basic Profile előírásnak.
A WSDL-t kicsit át kell írni, hogy megfeleljen a WS-I Basic Profile előírásnak, aminek eredményeképpen webszolgáltatásunk interoperabilisebb lesz.
Megjegyzés: Az xsd előtag arra az XML Schema alapú névtérre hivatkozik, amelyet a definition elemben határoztunk meg.

Leave a Reply