2010-08-11 67 views
4
  1. 我有一個基於NetTCP綁定的WCF應用程序。在客戶端應用程序中,我將它的代理類對象創建爲靜態。此客戶端應用程序可能會在部署後運行4-8小時。基本上在登錄窗口,我正在創建和初始化DataServiceClient代理類(主要是數據庫插入&更新)並在整個我的應用程序中使用相同的對象,直到用戶關閉主窗口。 創建代理類的靜態對象是否有任何不利影響(性能明智)?如果是的話,我該如何避免這種情況。在使用靜態對象之前,我在每個窗口(需要的地方)都創建了單獨的對象,但是這增加了窗口加載時間。靜態WCF代理類對象

  2. 我如何提高WCF性能。我對它的表現感到滿意,但這可能是我的幻想。

回答

3
  1. 沒有錯,使用相同的實例,但要確保你的錯誤處理是好的。否則,當發生錯誤時,代理對象將進入故障狀態,並且必須重新啓動整個應用程序。當狀態改變時,您可以附加一些事件。 代理對象進入故障狀態後,您必須創建一個新的代理對象,無法恢復出錯的代理對象。

  2. 我發現使用消息頭可以減少實際需要公開的方法數量,但這取決於您的服務的功能。 否則,我會建議儘可能使用流媒體。儘可能保持數據儘可能小。使用二進制格式化程序。

+0

我選擇了WCF b'coz我的客戶端應用程序需要在服務器上訪問數據。我的應用就像分佈式POS應用程序。所以WCF只包含使用存儲過程的數據庫訪問。 – 2010-08-14 13:00:58

+0

聽起來很直截了當,我不希望有任何問題。使用靜態代理對象可以提高性能,因爲您不必爲每次調用創建一個新頻道,但我不確定是否會真正注意到它。 – flayn 2010-08-16 16:53:17

+0

對不起,如果我是這種類型的實現的故障處理鏈接,你會很痛苦嗎?或者你在try catch中說出靜態方法的所有方法,如果失敗,則更新靜態實例? – Seabizkit 2016-10-13 12:25:50

1

看起來你的客戶端是一個Windows窗體應用程序 - 靜態服務代理應該確定你,只要你沒有做任何多線程或者回調的代理等從本質上講,在這樣的情況下, ,您需要將訪問權限同步到靜態變量。

籠統地談,WCF性能得以提升

  1. 精心設計的服務合同 - 它應該是矮胖的接口,而不是健談這樣的服務調用數量被減少
  2. 選擇合適的結合 - TCP綁定會比HTTP綁定更快,但它會是.NET合法性,並且可能無法通過互聯網工作,因爲其他端口將被阻止。如果您的同一臺機器上通信,那麼命名管道綁定將是最快的模式