我開發了一個WCF服務,用於組織的以太網中的消費。
該服務目前託管在Windows服務上,並使用net.tcp
綁定。
在服務中定義了2 operation contracts
。
連接到此服務的客戶端是長時間運行的Windows桌面應用程序。
員工(> 30,000)通常有這位客戶從星期一早上到星期五晚上一整個星期運行。
我應該在每次服務調用後打開並關閉我的WCF客戶端嗎?
在此生命週期中,根據主桌面客戶端上的某個用戶操作,可能會有多次調用wcf服務。 讓我們在主要桌面應用程序的每3個動作中就說1個,即 會觸發對我們服務的呼叫。
現在,我們正計劃部署每個員工的桌面
這個窗口服務我也使用`autofac`作爲依賴解析器容器。
我的WCF服務實例上下文是`PerSession`,但理想情況下我們的客戶端和服務都在同一臺桌面上運行(現在),因此我計劃使用`autofac`容器爲每個新會話注入相同的服務實例。
現在我沒有更改服務實現 上的`InstanceContext`屬性,因爲將來我可能會在不同的主機環境中部署相同的服務,我希望每個會話都有一個新的服務對象實例。
就像前面提到的,客戶端是一個長期運行的桌面應用程序,我已閱讀,這是一個很好的做法,`Open`和`Close`每個呼叫的代理,但如果我離開的服務成爲PerSession會爲每個呼叫創建一個新的服務實例,這可能不是必需的,因爲服務和客戶端都有1-1映射。
另一個說法是,我打算在此環境中爲每個會話注入相同的實例,因此每個服務調用的打開和關閉應該不重要?
那麼我應該採取哪種方法,爲每個呼叫提供服務`Singleton`並打開關閉或 當桌面應用程序加載/第一次服務呼叫時打開客戶端代理,然後僅在桌面應用程序關閉時關閉它?
當我的意思是通過注入相同的單個實例,我說的是注射相同的服務實例每次打開由客戶端代理調用,我不注入客戶端代理的單例實例。 –