![](/img/trans.png)
[英]How to get server endpoint address from client callback method (wcf duplex contract)
[英]WCF Duplex Contract
说我有这样的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
for ServiceContract而不是SessionMode.Required
但这也没有帮助。
解决方法:从IService1中删除CallbackContract。 创建继承IService1并包含CallbackContract的IDuplexService1。 让Service1Client实现IDuplexService1。 实例化主机时,请为IService1和IDuplexService1调用ServiceHost.AddServiceEndpoint
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.