【问题标题】:Duplex service with callbacks带回调的双工服务
【发布时间】: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/

非常感谢!

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    你想要的是双工通信,对吧?这取决于绑定,是否可能。您可以使用 WsDualHttpBinding,但不建议这样做,因为它不是官方标准。大多数 Tcp 绑定都支持双工。您可以找到information here 或此post

    【讨论】:

    • 嗯,每个对等点都有一个像this 这样的 NetTcpBinding 双工服务,并将此服务提供给其他对等点。同时,每个对等点可以使用其他对等点提供的相同服务。但是,通过这种方式,我将有两个连接,每个方向一个。
    • 双工用于客户端 服务器,而不是客户端 客户端。这就是 P2P。
    【解决方案2】:

    您是否调查过 NetPeerTcpBinding 绑定?您还可以使用某种对等解析器,我认为 WCF 默认会使用 PNRP(对等名称解析协议 - 来自 Microsoft)。或者,如果您喜欢冒险,您可以实现自己的对等解析器。

    【讨论】:

    • 是的,我读过 NetPeerTcpBinding,但我只会使用 NetTcpBinding。
    • 那么您可能正在查看 NetTcpBinding 上的双工。双工意味着您通过同一个 TCP 连接进行双向通信。
    • 也就是说,第一个对等体使用第二个对等体提供的双工服务,它以回调方式响应。同时,第二个对等点使用第一个对等点提供的相同服务。如果服务使用会话,2-peer 通信应该使用 2 个 TCP 连接...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多