【问题标题】:How To Limit a WCF Service Application, So That Only Unique Clients Can Access如何限制 WCF 服务应用程序,以便只有唯一客户端才能访问
【发布时间】:2010-12-23 05:13:00
【问题描述】:

我在 c# 中有一个 wcf 服务(例如 msdn 示例中的calculatorservice),我想知道是否可以将其限制为每个 IP 仅服务 1 个客户端?

我希望一次连接几个 IP 的可能性(至少 5-6 个活动会话),目前可行,但我不希望每个唯一 IP(或唯一计算机)有超过 1 个连接

【问题讨论】:

  • 除非您的服务是针对 Intranet 的,否则每台计算机的 IP 地址都不是唯一的。
  • 我知道,我想要的只是有人已经连接到服务,他无法通过同一个 ip 再次连接
  • 也许是更好的表达方式:当某人的会话仍处于活动状态时,他或她会获得一个新会话,直到第一个会话关闭。而且,是的,我的服务将主要用于 Intranet。

标签: c# wcf service limit ip


【解决方案1】:

如果您一次需要 5 个打开的会话,并且您说 maxConcurrentInstances 只导致 1 个可用客户端,您是否将 InstanceContextMode 设置为 = PerSession?您很可能将其设置为 Single,在这种情况下 maxConcurrentCalls 无效。将其更改为 PerSession,ForeverDebugging 显示的限制配置将起作用。

【讨论】:

  • 一切都在默认设置下,instancecontextmode 是 persession ... 如果我设置 maxConcurrentInstances="1" 我只能得到 1 个可用会话,如果我将 maxConcurrentInstances 保留为默认值,我可以使用我认为 10 节课(现在就足够了)。
【解决方案2】:

我取得了一些进展。当客户端第一次调用服务时,在构造函数中我保存了他的IP地址和他当前的操作上下文。

然后,如果来自同一 ip 的人连接,我会中止该 ip 地址使用的先前通道(最新连接具有优先权):

operationContext.Channel.Abort();

我对其进行了测试,它似乎释放了会话以便其他人可以使用它,但我不确定 -- 这是最好的解决方案吗?

【讨论】:

  • 目前看来工作令人满意,如果您有任何建议,请发表评论。我一直在谷歌上搜索类似的解决方案,但找不到任何有用的东西。
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多