WCF 双工合同
Posted
技术标签:
【中文标题】WCF 双工合同【英文标题】:WCF Duplex Contract 【发布时间】:2011-07-16 07:33:50 【问题描述】:假设我有这样的 WCF 服务合同
[ServiceContract(CallbackContract = typeof(ICallback1),
SessionMode = SessionMode.Required)]
public interface IService1
// some methods
服务实现将InstanceContextMode.Single
设置为InstanceContextMode
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()));
效果很好。现在的问题是我有一些客户端对回调不感兴趣所以我认为我不需要为这些客户端实现回调接口所以我尝试了这个
Service1Client serviceClient = new Service1Client(null);
和
Service1Client serviceClient = new Service1Client(new InstanceContext(null));
两者都报告了parameter cannot be null
。我的问题是,如果客户端对回调不感兴趣,我如何在不传递回调对象的情况下创建服务引用。唯一的要求是所有客户端都应该与同一个服务通信,否则我可以重组服务。有什么想法吗?
编辑:
我也尝试使用 SessionMode = SessionMode.Allowed
代替 SessionMode.Required
使用 ServiceContract,但这也没有帮助。
【问题讨论】:
只要是合同的一部分,看起来就不可能。 CallbackContract 可以是可选的吗? 简单来说,Callback被定义为Service Contract的一部分,这是不变的。配置其他所有内容不会更改合同,因此看起来不可能。 【参考方案1】:解决方法:从 IService1 中删除 CallbackContract。创建继承 IService1 并包含 CallbackContract 的 IDuplexService1。让 Service1Client 实现 IDuplexService1。实例化主机时,为 IService1 和 IDuplexService1 调用 ServiceHost.AddServiceEndpoint
。
【讨论】:
以上是关于WCF 双工合同的主要内容,如果未能解决你的问题,请参考以下文章