2010-01-06 60 views
3

也許這是一個明顯的問題,也許它不是。設想一個GUI控制應用程序,其中每個按鈕推送都會在遠程WCF服務上調用不同的功能。大約每隔幾秒鐘就會頻繁使用按鈕。一般情況下,最好是在每次函數調用時打開和關閉WCF通道,或者在應用程序的整個生命週期中保持通道打開狀態?當然假設這個應用程序只有幾個實例。重複調用WCF通道壽命

注意:這個問題不是真的關於這個例子,而是幫助我在這裏找到最佳實踐。

回答

1

建議不要打開通道,而是讓WCF決定何時關閉\打開通道。您可以通過反覆使用相同的客戶端對象來保存一些資源,只要確保沒有兩個線程同時使用它(例如,可以一次按下一個按鈕或一個按下一個按鈕)。

2

如果您不必在每次通話之前重新創建客戶端代理,那對您的性能肯定會有所幫助。

但是:這樣做,你必須確保在服務器端的所有異常(也許通過實現對您的服務IErrorHandler接口)妥善處理,變成了SOAP錯誤,可以轉移回客戶端沒有錯誤的頻道。

如果單個異常轉義您,並作爲「常規」.NET異常返回給客戶端,則通道(您的客戶端和服務器之間的通信鏈接)將爲故障 - >即呈現無用。

在這種情況下,您需要首先檢查該狀態(該通道具有.State屬性),並且如果遇到故障通道,除了在調用方法之前重新創建客戶端代理之外,您無法做任何事情在上面。