用于对称通信的单个TCP连接

本文关键字:TCP 连接 单个 对称 通信 用于 | 更新日期: 2023-09-27 18:17:34

我想实现一个允许两个节点以对称的方式在两个方向上通信的WCF服务。具体来说,以下是需求:

  • 我不需要请求/应答协议,但我需要异步应答的回调;
  • 两个节点之间必须建立一个TCP连接;
  • 当连接建立时,通信必须在单个TCP连接中是对称的(两个节点中的每一个节点都可以向另一个节点发送请求,两个节点中的每一个节点都可以收到另一个节点的回复)。

因此,我认为我应该使用netttcpbinding,并通过继承为服务和回调使用相同的接口。

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();
}

这种实现可行吗?有没有更好的选择?

用于对称通信的单个TCP连接

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

如果你了解回调和基本线程,它将相当简单。