Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/w3net.eu/www/wp-includes/cache.php on line 99 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/w3net.eu/www/wp-includes/query.php on line 21 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/w3net.eu/www/wp-includes/theme.php on line 576 W3Net.eu » Blog Archive » Keserves WSDL kezdetek

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:

<message name="nmtoken">
  <part name="nmtoken" element="qname"? type="qname"?/> *
</message>

A part elemnek type, vagy element attribútuma lehet, de nem mindkettő egyszerre.
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