WCF Test Client posílá null místo zadané hodnoty typu string

Při vývoji a ladění WCF služeb používáte jistě i WCF Test Client. Ten se hodí pro rychlé otestování volání WCF metod bez toho, že by bylo nutné psát nějaký klientský kód. Nedávno jsem jej použil pro test metody, kde byl parametr typu string, do kterého se předává jméno souboru s plnou cestou. Byl jsem nemile překvapen, že WCF service nepracovala jak má. Jsem zvyklý hledat chyby nejdříve ve svém kódu, ale v tomto případě to nebyl správný postup.

Nakonec jsem zjistil, že WCF Test Client místo mé zadané hodnoty typu string vesele posílá hodnotu null a vůbec mu to nevadí. Zde je to vidět na příkladu "výchozí" WCF service kterou vytvoří Visual Studio pomocí File -> New -> Project / WCF / WCF Service Application:

Zde je ještě odeslaný XML paket, ze kterého je to zřejmé:

Kde je tedy chyba ?

Vzhledem k tomu, že mi doposud přes WCF Test Client fungovalo volání metod s parametry typu string bez problému, jsem pojal podezření na znak \ v daném řetězci. Zkusil jsem tedy použít "escapovaný" formát zápisu jakoby v jazyce C#, tedy jsem změnil řetězec na C:\\DataFolder\\File1.txt a vida, najednou vše fungovalo !

Uvedené chování dokáže dokonale zmást vývojáře, protože při zadání hodnoty v nesprávném formátu není na toto nijak upozorněn a klient zasílá zcela neočekávanou hodnotu. Což je zákeřné, protože se od tohoto nástroje očekává pomoc při vývoji aplikace. V případě že daná WCF metoda umožňuje i předání hodnoty null jako vstupního parametru typu string, není tato chyba hned na první pohled patrná.

Je otázka jestli má zrovna v tomto případě smysl, aby se hodnota vůbec zadávala takovým způsobem a ne přirozeně "tak jak je". Microsoft zde zřejmě použil stejný vizuální prvek jako ve Visual Studiu v oknech Watch, Locals a podobně. Tam ovšem při editaci hodnoty dojde v případě pokusu o vložení chybně zadaného formátu řetězce k chybovému hlášení: Unexpected character '\'. Zde to někdo zapomněl ošetřit.

Jedná o WCF Test Client z Visual Studio 2010, verze: 10.0.30319.1. Chyba je nahlášena u Microsoftu zde: https://connect.microsoft.com/VisualStudio/feedback/details/632374/

P.S. při zmínce o "escapovaném" zápisu nelze neuvést odkaz na tohle http://geekandpoke.typepad.com/geekandpoke/2010/02/the-geek-joke-of-the-week.html Smile

Aktualizace

Další chyba se týká zadávání hodnot typu decimal, pokud je v operačním systému nastaven oddělovač desetinných míst jako čárka. V případě zadání oddělovače jako tečky dostaneme chybové hlášení. V případě zadání jako čárky, kde očekáváme, že bude korektně převedena na reprezentaci v XML je oddělovač zcela ignorován a je odeslána hodnota bez oddělovače ! Tedy například pro zadanou hodnotu "2,50" bude odesláno "250".

 

Komentáře jsou uzavřeny