Ha PHP-ben implementáltunk SOAP webszolgáltatást, akkor erősen ajánlott azt letesztelni nem PHP ügyfelekkel is.
PHP-ben írt klienssel azért nem érdemes tesztelni a szolgáltatásunkat, mert az nem szokott panaszkodni semmire sem.

A következőket kell ellenőriznünk:

  • a szolgáltatás leírásáért felelős WSDL állomány érvényességének ellenőrzése.
  • a webszolgáltatás megfelel-e a WS-I (Web Services Interoperability Organization)
    ajánlásoknak (WS-I Basic Profile).
  • A webszolgáltatás publikus interfészének metódusainak tesztelése

A WS-I (webszolgáltatások együttműködésének szervezete) vezető szoftvergyártók által megalapított nem hivatalos független szakmai szervezet.
A WS-I fő célja, hogy előmozdítsa a webes szolgáltatások kölcsönös együttműködését a különféle platformok, alkalmazások és programozási nyelvek között.
A legfontosabb dokumentuma a WS-I Basic Profile.

A következőkben egy egyszerű .NET klienst készítünk C# nyelven.
Csupán a .NET Framework megléte nem elég, szükséges telepítenünk a
Windows SDK for Windows Server 2008 and .NET Framework 3.5-t is.


installation dialog

  1. Proxy osztályt generálunk a WSDL.exe eszközzel (make_proxy.bat fájl).
    @echo off
    cls
    "c:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\WSDL.exe" /out:proxy.cs {URL_TO_WSDL}/service.wsdl
    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library proxy.cs
    
  2. Lefordítjuk a forráskódunkat úgy, hogy az előző lépésben létrejött proxy dll-t belinkeljük (make.bat).

    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:exe /out:Test.exe Test.cs /R:proxy.dll
    

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.

JavaScript performance comparison chart

Table 1. JavaScript engine performance (lower is better)
Test #1 Test #2 Test #3 Test #4
Firefox 3 beta 5 15.3 51.3 135.9 48.3
Firefox 2 184.5 782.8 909.6 828.2

I decided to give a try to Firefox 3 beta 5 and did some JavaScript performance comparison to see how faster it is. I used my own test script that performs object instantiations.
For a more thorough benchmark I recommend using SunsSpider JavaScript benchmark.