【发布时间】:2011-11-24 19:46:24
【问题描述】:
假设我们有一个具有以下方法的服务。
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ISampleServiceCallback))]
interface ISampleService
{
[OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false)]
void Connect(string version);
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
void Request(string uuid, string description);
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)]
void Disconnect();
}
interface ISampleServiceCallback
{
[OperationContract(IsOneWay = true)]
void Reply(string uuid, string description);
}
客户端调用Connect 方法,并在客户端和服务器之间启动一个新会话。 在此会话期间,客户端可能会调用 Request 方法...服务器在收到请求消息后,如果能够响应客户端,则使用回调发送回复。
现在假设这两个节点不是客户端和服务器,而是两个对等点。如何进行双向通信?我希望两个节点中的每一个都可以调用另一个节点的请求......可能吗? 换句话说,两个节点中的一个决定通过调用另一个节点的 Connect 方法来与另一个节点创建一个新会话……如果后者接受连接,则创建一个新的通信会话,但两个节点必须能够调用其他节点的方法。
我的想法是在两个节点之间创建两个会话:在第一个会话中,节点 A 是客户端,而节点 B 是服务器;第二个会话的方向相反:节点 B 是客户端,而节点 A 是服务器。 但是,这样我就有了两个 TCP 连接……还有其他选择吗?
这是一个解释它应该如何工作的图表:http://imageshack.us/photo/my-images/600/multipleservices.png/
非常感谢!
【问题讨论】: