6

假设我有这样的 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使用 ServiceContract 来代替,SessionMode.Required但这也无济于事。

4

1 回答 1

2

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

于 2011-03-16T04:51:25.567 回答