加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – “OperationContext.Current.GetCallbackChannel”实际上

发布时间:2020-12-15 08:11:40 所属栏目:百科 来源:网络整理
导读:OperationContext.Current.GetCallbackChannel实际上做了什么?它如何识别每个客户? 我在WCF服务中遇到问题.如果有两个以上的用户连接到该服务,那么我从服务发送到客户端的所有“有趣的更改”将转到第二个加入的用户. 例如,如果我通过回调将更改发送到C和D,
OperationContext.Current.GetCallbackChannel实际上做了什么?它如何识别每个客户?

我在WCF服务中遇到问题.如果有两个以上的用户连接到该服务,那么我从服务发送到客户端的所有“有趣的更改”将转到第二个加入的用户.

例如,如果我通过回调将更改发送到C和D,则A,B,C,D加入服务,它将转到B.

有任何想法吗?

细节:

客户端:ASP.NET Web应用程序

绑定:netTCPBinding

UPDATE1

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

解决方法

当服务接收到一个呼叫时,OperationContext.Current.GetCallbackChannel会向该呼叫者返回一个频道.它不会返回广播给所有客户端的频道.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读