假设我们有一个具有以下方法的服务。
[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 方法,客户端和服务器之间开始新的 session 。 在此 session 期间,客户端可能会调用Request方法...服务器在收到请求消息后,如果能够响应客户端,则使用回调发送回复。
假设现在两个节点不是客户端和服务器,而是两个对等体。如何进行双向通信?我希望两个节点中的每一个都可以调用另一个节点的 Request ... 可以吗? 换句话说,两个节点中的一个决定通过调用另一个节点的 Connect 方法与另一个节点建立新的 session ……如果后者接受连接,则创建一个新的通信 session ,但两个节点必须能够调用其他节点的方法。
我的想法是在两个节点之间创建两个 session :在第一个 session 中,节点 A 是客户端,而节点 B 是服务器;第二个 session 的方向相反:节点 B 是客户端,而节点 A 是服务器。 但是,通过这种方式我有两个 TCP 连接......还有其他选择吗?
这是一个解释它应该如何工作的图表:http://imageshack.us/photo/my-images/600/multipleservices.png/
非常感谢!
最佳答案
你要的是双工通信吧?这取决于绑定(bind),是否可能。您可以使用 WsDualHttpBinding,但不推荐这样做,因为它不是官方标准。大多数 Tcp 绑定(bind)都支持双工。你找到information here或者在这个post .
关于c# - 带回调的双工服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261848/