【问题标题】:Obtaining a list of connected clients for a wcf service获取 wcf 服务的已连接客户端列表
【发布时间】:2010-12-12 20:35:20
【问题描述】:

如何为服务主机的所有连接客户端枚举某种位置标识符?我正在使用双工连接进行长时间运行的计算。 Service 主机是单例的。

我可以计算出(在 .net 3.5 中)调用客户端的 ip,但我不确定如何获取所有已连接客户端的 ip。

【问题讨论】:

    标签: c# wcf .net-3.5 ip net.tcp


    【解决方案1】:

    默认情况下,WCF 提倡使用“每次调用”服务,例如您的客户端调用,请求得到处理,然后客户端立即再次断开连接。

    WCF 不适合并且不适合长时间运行的连接 - 因此您不能真正“枚举当前连接的用户”,因为没有任何(或仅用于第二)。

    WCF 不像 Windows 域服务器,您可以在其中登录并长时间保持登录状态。

    【讨论】:

    • 抱歉,我在帖子中没有说清楚,但我没有使用默认服务行为。 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 使用 InstanceContexMode.Single,有一个实例的寿命比默认的“每次调用”模式更长。实现的服务当前使用回调合约在结果准备好时发送结果。客户端缓存它与服务器的连接,以便它们可以用于多个请求。连接是长期运行的。
    • 好的 - 我认为这不是一个好主意,但我不知道你的设置细节;不幸的是,在 WCF 3.5 中,对管理和监视的支持并不多——这将是“都柏林”项目的一部分——IIS7/WAS 的管理附加组件计划在 .NET 4 之后的某个时间(2010 年 3 月)发布)。
    【解决方案2】:

    我认为没有任何内置功能,但是构建一个跟踪 IServiceBehavior + IDispatchMessageInspector 会非常容易,它会在调用被分派到服务 impl 之前检查 RemoteClientEnpointMessageProperty 并将客户端 IP 粘贴到共享列表,并在通话/会话结束时将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2011-09-27
      相关资源
      最近更新 更多