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

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

服务实现已为InstanceContextMode.Single设置了InstanceContextModeICallback1就像
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));

两者都报告了parameter cannot be 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/

10-10 18:13