我有一个在负载均衡器后面运行的ASP.NET Web API应用程序。某些客户端将HTTP忙连接保持活动太长时间,从而产生不必要的亲和力并导致某些服务器实例上的高负载。为了解决这个问题,我希望优雅地关闭在短时间内执行过多请求的连接(从而迫使客户端重新连接并选择不同的服务器实例),同时保持低流量连接无限期地存活。因此我不能使用静态配置。
是否有一些API我可以调用以标记请求"回答此问题然后关闭连接" ?或者我可以简单地添加ASP.NET将看到的Connection: close
HTTP标头并为我关闭连接吗?
答案 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相同)。