用于对称通信的单个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();
}
这种实现可行吗?有没有更好的选择?
MSDN有一个很好的异步TCP教程:http://msdn.microsoft.com/en-us/library/5w7b7x5f (v = vs.71) . aspx
如果你了解回调和基本线程,它将相当简单。