c# - "OperationContext.Current.GetCallbackChannel"实际上是做什么的?

标签 c# wcf callback duplex

OperationContext.Current.GetCallbackChannel 实际上做了什么?它如何识别每个客户?

我的 WCF 服务遇到问题。如果超过两个用户连接到该服务,我从服务发送到客户端的所有“有趣的更改”都将发送给第二个加入的用户。

例如,如果 A、B、C、D 加入服务,如果我通过回调将更改发送给 C 和 D,它将发送给 B。

有什么想法吗?

详细信息:

客户端:ASP.NET 网络应用

绑定(bind):netTCPBinding

更新1

好的,我已经找到问题的原因了。我在 IIS 中托管了 asp.net 客户端。例如客户端的 URL 是 http://url1 .如果我在不同的机器上打开页面的多个实例并加入服务,回调 channel 总是指向页面的第一个实例(我从不同的机器打开网站)。但是,如果我在 IIS 的不同站点下托管 asp.net 客户端,则回调 channel 是唯一的。对此有什么想法吗?

最佳答案

当服务收到调用时,OperationContext.Current.GetCallbackChannel 返回一个 channel 给那个调用者。它不会返回向所有客户端广播的 channel 。

根据您的问题,您可能只存储了在上次调用中检索到的回调。您实际上必须存储一个列表,其中包含已检索到的每个唯一回调实例。每次调用方法时,都会将回调实例添加到此列表中。当您想要广播时,您必须遍历列表中的每个项目并进行必要的调用。

如果您的服务使用单例实例模式,则实现对象可以将回调实例列表存储为数据成员。如果您的服务使用 Client 或 SingleCall 实例模式,那么您可以拥有一个包含回调实例列表的全局对象。

关于c# - "OperationContext.Current.GetCallbackChannel"实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3171405/

相关文章:

c# - IErrorHandler 在 HTTP 状态代码为 401 Unauthorized 时返回错误的消息正文

c# - 从现有实例创建 IList<T> 的新实例并修改它

c# - ASP.Net Core API 总是返回 401 但包含 Bearer token

c# - Selenium:选择框架

c# - System.XML将值读入数组

javascript - setInterval 和事件循环

c# - 如何使用自签名证书实现 WCF 安全性?

WCF - 无法获取元数据,但在删除 XML 端点时工作?

azure - 机器人是远程的,但回调 URL 是 localhost

Jquery在自定义函数中调用回调函数