gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:22:23 29 4
gpt4 key购买 nike

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/

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