ASP MVC:我可以以编程方式删除客户端连接吗?

时间:2016-04-14 22:19:06

标签: asp.net asp.net-mvc http azure azure-web-sites

我有一个在负载均衡器后面运行的ASP.NET Web API应用程序。某些客户端将HTTP忙连接保持活动太长时间,从而产生不必要的亲和力并导致某些服务器实例上的高负载。为了解决这个问题,我希望优雅地关闭在短时间内执行过多请求的连接(从而迫使客户端重新连接并选择不同的服务器实例),同时保持低流量连接无限期地存活。因此我不能使用静态配置。

是否有一些API我可以调用以标记请求"回答此问题然后关闭连接" ?或者我可以简单地添加ASP.NET将看到的Connection: close HTTP标头并为我关闭连接吗?

3 个答案:

答案 0 :(得分:2)

对于您的情况,好的解决方案似乎是名为Dynamic IP restriction的内置IIS功能。 “为了提供这种保护,模块会临时阻止HTTP客户端的IP地址,这些客户端会产生异常大量的并发请求,或者在很短的时间内发出大量请求。”

Azure Web Apps支持它: https://azure.microsoft.com/en-us/blog/confirming-dynamic-ip-address-restrictions-in-windows-azure-web-sites/

如果这是有用的答案,请将其标记为有用或将其标记为答案。谢谢!

答案 1 :(得分:1)

我并非100%确定这会在您的情况下有效,但在过去,我不得不阻止来自地理位置的特定IP地址的人和来自常见代理的人。我创建了一个授权属性类:

http://www.asp.net/web-api/overview/security/authentication-filters

In会通过返回HttpStatusCode.BadRequest根据其IP地址转出此人。在每次请求时,您都必须检查数据库中的错误ips列表并从那里开始。也许你可以处理其余的客户端,因为他们会遇到很多错误。

答案 2 :(得分:1)

写一个action filter,为“阻止”' IP地址。我希望,客户端将关闭当前连接并再次尝试新位置(可能与原始请求的URL相同)。