Welcome to Weblog @ rebex.cz Sign in | Help

Je volání webových služeb přes SOAP z .NETu spolehlivé?

Dlouho jsem nevěřil, že HttpWebRequest je tak moc problémový, jak se proslýchalo. Sice jsem s ním měl také problémy, ale nezavrhl jsem ho. To, že se při stahování autentikované stránky posílají dva požadavky, z nichž první je zamítnut, není chyba - je to v souladu s RFC 1945, kde se definuje autentikační mechanismus jako challenge-response. WebRequest sice má property PreAuthenticate, která má mít za následek odesílání autorizačního headeru už s prvním požadavkem, ale to platí až pro požadavky odeslané po úspěšné autentikaci následující po první 401ce. V instalovatelné verzi MSDN Library je to velmi přesně popsáno, zatímco v online verzi jsem nenašel ani zmínku.

Avšak další užitečná property KeepAlive se opravdu chová divně. Přestože je defaultně nastavena na true, týká se zřejmě jen neautentikovaných požadavků. Když jsem potřeboval přes WebDAV a NTLM autentikaci přistupovat k datům SharePointu, velice brzy jsem narazil - NTLM autentikace není nejrychlejší, zvlášť když se úplně zbytečně provádí stále dokola. A to opravdu není omezení NTLM ani IIS, o čemž je možné se přesvědčit za pomoci odchytávače paketů během procházení WebDAVu SharePointím pluginem do Exploreru - KeepAlive funguje, autentikace proběhne jen jednou, spojení drží a veškerá komunikace probíhá bez jakéhokoliv zdržování. Nakonec jsem svůj boj s HttpWebRequestem vzdal a pomalost obešel použítím vlastní cache... Bylo to ošklivé řešení, ale psát HTTP komponentu s podporou nedokumentovaného NTLM se mi nechtělo a ani na to nebyl čas.

Ale po zkušenostech Vaška Bárty a Michala Bláhy s používáním WebRequestu z více threadů se už budu od té na první pohled užitečné třídy držet raději dál - její jednoduchost ani zdaleka nevyvažuje všechny problémy. Jestli bude třída FtpWebRequest (paradoxní název, že?) z příští verze .NETu stejně spolehlivá, tak potěš pánbu.

Nepoužívat WebRequest bohužel není tak jednoduché. Jednou ze základních vymožeností .NET Frameworku jsou Web services a SOAP. Klientský stub vygenerovaný kompilátorem WSDL sestává ze třídy zděděné z SoapHttpClientProtocol. A tato třída je jen obálka právě okolo WebRequestu! Potřebujete volat webové služby z více threadů najednou? Možná to fungovat bude, ale pro jistotu přeji hodně štěstí a pevné nervy.

Published 1. prosince 2003 20:54 by lukasp

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

Kdyz tak ctu zkusenosti s HTTPWebRequest, nevite nekdo o free clase, ktera by umela alespon basic auth, proxy, synchronni i asynchroni pristup?

Az prijedu z dovolene, upravim sve zdrojaky HTTPRequestu pres Sockety pro uverejneni :-), pro inspiraci a dalsi dodelani. ja na to ted nemam cas :-(

2. prosince 2003 6:18 by lukasp

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

interesting

21. května 2007 14:39 by Loukianos

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

interesting

10. června 2007 14:18 by Michalis

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

interesting

10. června 2007 21:26 by Stylianos

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

Interesting...

16. června 2007 4:35 by Stefanos

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

interesting

16. června 2007 21:16 by Demetri

# re: Je volání webových služeb přes SOAP z .NETu spolehlivé?

interesting

9. července 2007 21:25 by Grigoris

Leave a Comment

(required) 
required 
(required)