说我有像这样的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
而不是{{1}},但这也无济于事。
答案 0 :(得分:2)
解决方法:从IService1中删除CallbackContract。创建继承IService1并包含CallbackContract的IDuplexService1。让Service1Client实现IDuplexService1。实例化主机时,请为IService1和IDuplexService1调用ServiceHost.AddServiceEndpoint
。