用于对称通信的单TCP连接

时间:2011-12-09 15:30:24

标签: c# wcf

我想实现一个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();
}

这种实施能否奏效? 还有更好的选择吗?

1 个答案:

答案 0 :(得分:0)

MSDN有一个很好的异步TCP教程: http://msdn.microsoft.com/en-us/library/5w7b7x5f(v=vs.71).aspx

如果您了解回调和基本线程,那将非常简单。