【发布时间】:2010-12-12 20:35:20
【问题描述】:
如何为服务主机的所有连接客户端枚举某种位置标识符?我正在使用双工连接进行长时间运行的计算。 Service 主机是单例的。
我可以计算出(在 .net 3.5 中)调用客户端的 ip,但我不确定如何获取所有已连接客户端的 ip。
【问题讨论】:
标签: c# wcf .net-3.5 ip net.tcp
如何为服务主机的所有连接客户端枚举某种位置标识符?我正在使用双工连接进行长时间运行的计算。 Service 主机是单例的。
我可以计算出(在 .net 3.5 中)调用客户端的 ip,但我不确定如何获取所有已连接客户端的 ip。
【问题讨论】:
标签: c# wcf .net-3.5 ip net.tcp
默认情况下,WCF 提倡使用“每次调用”服务,例如您的客户端调用,请求得到处理,然后客户端立即再次断开连接。
WCF 不适合并且不适合长时间运行的连接 - 因此您不能真正“枚举当前连接的用户”,因为没有任何(或仅用于第二)。
WCF 不像 Windows 域服务器,您可以在其中登录并长时间保持登录状态。
【讨论】:
我认为没有任何内置功能,但是构建一个跟踪 IServiceBehavior + IDispatchMessageInspector 会非常容易,它会在调用被分派到服务 impl 之前检查 RemoteClientEnpointMessageProperty 并将客户端 IP 粘贴到共享列表,并在通话/会话结束时将其删除。
【讨论】: