c# - 带回调的双工服务

标签 c# wcf

假设我们有一个具有以下方法的服务。

[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/

相关文章:

c# - XNA 中的彩色单像素

asp.net - 找不到类型 'RestService.weddingservice',在 ServiceHost 指令中作为服务属性值提供

c# - WCF 中的信息重用

c# - 为什么System.ServiceModel.Dispatcher需要全限定才能编译

c# - 调用ASP.NET页面的WCF方法OnUnload

c# - 使用 C# .NET 驱动程序 2.0 投影 mongodb 子文档

c# - 使用 HelixToolkit 为 PointCloud 中的每个点应用颜色

c# - 将单选按钮列表添加到 ascx

c# - WCF 以 JSON 格式返回 double 并在昏迷后限制数字

c# - (_) => 做工作();下划线如何作为匿名委托(delegate)参数有效?