2011-12-09 11 views
1

我想實現一個WCF服務,它允許兩個節點以對稱的方式在兩個方向上進行通信。特別是,這裏的要求:用於對稱通信的單個TCP連接

  • 我不需要一個請求/回覆協議,但我需要異步回覆的回調;
  • 必須在兩個節點之間建立單個TCP連接;
  • 建立連接時,通信必須是對稱的(兩個節點中的每個節點都可以向另一個節點發送請求,兩個節點中的每個節點都可以接收來自另一個節點的回覆)。

因此,我認爲我應該使用NetTcpBinding並使用相同的接口爲服務和回調通過使用繼承。

interface ICommonInterface 
{ 
    void Request(string dataRequest); 
    void Reply(string dataReply); 
    void Disconnect(); // both nodes must be able to close the TCP connection 
} 

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IMyServiceCallback))] 
interface IMyService : ICommonInterface 
{ 
    [OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false)] 
    void Connect(); 

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void Request(string dataRequest); 

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void Reply(string dataReply); 

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)] 
    void Disconnect(); 
} 

interface IMyServiceCallback : ICommonInterface 
{ 
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void Request(string dataRequest); 

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void Reply(string dataReply); 

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)] 
    void Disconnect(); 
} 

請問這種實施方式有效嗎? 有更好的選擇嗎?

回答