2015-02-10 50 views
1

在WCF雙工項目我的工作,代理創建並使用以下3條線路開通:WCF回調對象的邏輯

InstanceContext context = new InstanceContext(new MyCallbackObjectImplementingCallbackContract()); 

_proxy = new ServiceClient(context); 

_proxy.Open(); 

我有幾個問題在這裏:

  1. 讓說我的回調合同只有3個方法(操作合同)和我的回調類,除了實施這3個我還有10個更多的方法。 我發現通過在服務器端調試時 OperationContext.Current.GetCallbackChannel<IMyCallbackContract>()被稱爲 返回的對象只有屬性'OperationContract'的方法,而不是整個對象。幕後的魔法是什麼?另外,在回調類中添加一堆額外的(不是合同實現)方法是否不錯,如果有的話,它可能會產生什麼影響?
  2. _proxy.open()元數據說對象從創建狀態轉換到打開狀態。我不明白這意味着什麼?

回答

0

問題1:是的,WCF只會查找標有OperationContract屬性的方法。它使用舊的Remoting RealProxy/TransparentProxy機制創建代理。基本上,WCF在契約接口中查找操作,而不是在實現接口的類中查找。它也代理合同接口,而不是實現類。

至於設計問題,這取決於。只要其他方法幫助操作方法履行合同,就沒有問題。但是如果其他方法實施不同的責任,那麼聽起來這樣的設計違反了單一責任原則。

問題#2:在WCF中,頻道代理繼承CommunicationObject。該對象不是無狀態的,它跟蹤通道上的通信狀態。而且,它可以在遠程端進行會話,這是一個昂貴且有限的資源。由於這些原因,通信對象應該很像數據庫連接一樣處理:打開它,執行操作,然後Close()Abort()。您可以在this MSDN topic中找到更多詳細信息。