2010-05-27 63 views
1

我正在使用Visual Studio生成的代理類與SOAP Web服務進行通信。生成的類派生自System.Web.Services.Protocols.SoapHttpClientProtocol。我發現這個類實例化很昂貴,所以我正在考慮修改我的工廠方法以返回該類的Singleton實例。根據the documentation,該類對於多線程是安全的。.NET Web服務代理類是否安全地用作單例?

有沒有人有重用這些類的實例的經驗?這樣做是否有負面影響(即連接保持打開等)?

.NET Framework版本:2.0

回答

0

不應該有任何理由,在一個單例模式使用這些類應該引起問題,但是我很有點吃力unserstand你想解決什麼問題。當你說這些類實例化你比較它們的代價是昂貴的嗎?實例化代理類的成本與向Web服務發出http請求的成本相比應該是微不足道的。你能解釋一下這些情況嗎?/發佈一些代碼來證明你的性能瓶頸是由實例化代理類引起的。

+0

事實證明,實例化的成本是由於從應用程序配置文件中生成的設置加載Web服務URL所致。這是一次性成本,所以你是正確的,應該不需要重用代理實例。 – Mario 2010-05-31 19:42:38

0

我可以想象出除了開銷之外實例化代理的單例的多種原因,我同意這不是很多。最大的原因是維護服務調用之間的會話。想象一下,有多個頁面的應用程序都使用相同的Web服務方法。對於Web服務調用的會話通常是通過在代理設置cookie參數進行:

proxy.CookieContainer = new System.Net.CookieContainer(); 

如果要創建爲每個頁面操作一個新的代理,該會議將於頁輸給頁面。創建所有頁面使用的單例代理將解決此問題。