c# - WCF 双工契约(Contract)

标签 c# wcf duplex

假设我有这样的 WCF 服务契约(Contract)

[ServiceContract(CallbackContract = typeof(ICallback1),
SessionMode = SessionMode.Required)]
public interface IService1
{
  // some methods
}

服务实现为 InstanceContextMode 设置了 InstanceContextMode.Single ICallback1 类似于

public interface ICallback1
{
    [OperationContract]
    void Report(int someValue);
}

现在在客户端,我可以有一个实现 ICallback1 的类

class Callback1 : ICallback1
{
    public void Report(int someValue)
    {
        // alert client
    }
}

然后我像这样创建客户服务引用

Service1Client serviceClient = new Service1Client(new InstanceContext(new CallBack1())); 

效果很好。现在的问题是我有一些客户对回调不感兴趣,所以我想我不需要为这些客户实现回调接口(interface)所以我尝试了这个

 Service1Client serviceClient = new Service1Client(null);

 Service1Client serviceClient = new Service1Client(new InstanceContext(null));

两者均报告参数不能为空。我的问题是,如果客户端对回调不感兴趣,我如何在不传递回调对象的情况下创建服务引用。唯一的要求是所有客户都应该与同一个服务对话,否则我可以重组服务。有什么想法吗?

编辑:

我也为 ServiceContract 尝试了 SessionMode = SessionMode.Allowed 而不是 SessionMode.Required 但这也没有帮助。

最佳答案

解决方法:从 IService1 中删除 CallbackContract。创建 IDuplexService1 继承 IService1 并包含 CallbackContract。让 Service1Client 实现 IDuplexService1。实例化主机时,为 IService1 和 IDuplexService1 调用 ServiceHost.AddServiceEndpoint

关于c# - WCF 双工契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5321024/

相关文章:

JAVA从服务器推送到客户端

wcf - 用于双工回调的 WSDualHttpBinding

c# - 转换为自定义类型、Enumerable.Cast<T> 和 as 关键字

c# - 使用 asp.net mvc 为不同的用户类型提供不同的启动布局

web-services - SharePoint 2013 中的自定义 Web 服务与模拟

c# - 托管到服务器时 WCF 出错

c# - 开源 CMS(.Net 与 Java)

c# - 源重置后扩展器分组崩溃

wcf - WCF 和 IIS 的 "IntelliTrace is not collecting data for this debugging session"消息

c# - WCF - 回调接口(interface)可以指定为通用接口(interface)吗?