说我有这样的WCF服务契约(Contract)
[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()));
效果很好。现在的问题是,我有一些客户端对回调不感兴趣,因此我认为不需要为此类客户端实现回调接口(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/