PHP alapú SOAP webszolgáltatás tesztelése .NET klienssel
June 19th, 2008
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.
- 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 -
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:
<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.
Firefox 2 vs Firefox 3 beta 5
May 13th, 2008

| 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.

