我正在使用VS 2008服務引用來使用WCF服務並創建其代理。WCF客戶端代理初始化
我找調用WCF服務方法
- 我應該我每次調用服務方法,一旦我做完這些後關閉客戶端時創建客戶端代理實例的最佳模式?當我分析我的客戶端應用程序時,我可以看到在初始化代理客戶端時獲取頻道需要很長時間
- 我應該爲客戶端代理使用Singleton模式,以便我可以只使用一次實例並獲取擺脫重新初始化開銷?這種方法有沒有隱藏的問題?
我正在使用.Net框架3.5 SP1,basicHttp綁定幾乎沒有自定義。
我正在使用VS 2008服務引用來使用WCF服務並創建其代理。WCF客戶端代理初始化
我找調用WCF服務方法
我正在使用.Net框架3.5 SP1,basicHttp綁定幾乎沒有自定義。
這取決於;-)
如果你在你的應用程序的順序,需要一前一後幾個電話,你可以掛在代理客戶,並繼續使用它進行進一步的調用。儘管要檢查「故障」狀態,但要警告 - 如果服務器上發生錯誤,客戶端代理和服務器之間的通道可能「出錯」,從而導致客戶端代理變得不可用。
而且 - 昂貴的部分是ChannelFactory<T>
的創建 - 你可以嘗試這兩個步驟分離出來,當你在代碼中創建您的客戶端proyx:到該通道工廠,例如
ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>();
航緩存某處
第二步應該是在時間上和馬力更密集:
IYourService client = factory.CreateChannel();
你可以做的每調用之前這一步(或稱序列),不應該出來變得糟糕表現那真的。
我強烈建議儘可能避免單身 - 這就像打開一罐蠕蟲,除非你絕對肯定必須(例如,管理對一個呼叫者只有一個呼叫者一次)。
馬克
我同意製作單個工廠實例的方法,並且沒有單例通道實例。對於通道,請使用em和鬆動em,並確保正確關閉它們,檢查故障狀態。 – CodingWithSpike 2009-11-05 17:05:03
對不起,我踢了一個老問題,但我想添加此,以供參考。
我完全同意marc_s和rally25rs。所以從這裏開始,還要考慮使用處理故障狀態的代理或包裝器。 Here is a question在SO上討論了一些解決方案,here is another我在Corneliu的互聯網上遇到的很好的解決方案,「構建可重複使用的ClientBase代理」。他的解決方案生成的包裝可以暴露您的服務方法,以獲得最大的便利性和性能我仍然需要測試它是否可以正常工作:)。
@ 123開發者:太好了 - 謝謝! (這對新人來說並不容易「明顯」 - 我同意 - 這就是我指出的原因) – 2009-11-05 17:06:43