gpt4 book ai didi

c# - WCF 双工契约(Contract)

转载 作者:太空狗 更新时间:2023-10-29 21:55:39 25 4
gpt4 key购买 nike

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

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

服务实现为 InstanceContextMode 设置了 InstanceContextMode.SingleICallback1 类似于

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));

两者均报告参数不能为空。我的问题是,如果客户端对回调不感兴趣,我如何在不传递回调对象的情况下创建服务引用。唯一的要求是所有客户都应该与同一个服务对话,否则我可以重组服务。有什么想法吗?

编辑:

我也为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com