我们有一个 ASP.NET Core 2.x 应用程序,它实现了自定义中间件,充当另一个(基于 Java 的)服务器/应用程序前面的代理。此应用程序/中间件的客户端通常会在服务器请求完成之前频繁中止/取消其请求。
我们已将此应用程序部署到 IIS(作为反向代理)并在 Kestrel 上运行。在 Core 2.x 之前,Kestrel 有一个错误,导致HttpContext.RequestAborted永远是false https://github.com/aspnet/KestrelHttpServer/issues/1139(其他相关问题here https://stackoverflow.com/questions/39574061/httprequest-not-aborted-cancelled-on-browser-abort-in-asp-net-core-mvc)...这显然在 2.x 中已修复(我已经能够确认)。
但是,当在 Kestrel 前面运行 IIS 时,它似乎不会将请求中止转发给 Kestrel,并且RequestAborted
is still always false
有什么办法可以得到RequestAborted
在此配置中工作(或任何其他方式来检测它,如果没有)?
简单的复制仓库:https://github.com/mikeomeara1/RequestAbortRepro https://github.com/mikeomeara1/RequestAbortRepro
UPDATE
此评论 https://github.com/aspnet/KestrelHttpServer/issues/1139#issuecomment-258281409似乎表明存在一个已知问题,但目前尚不清楚其程度
这个问题 https://github.com/aspnet/AspNetCoreModule/issues/38似乎也相关,但对我来说,它并不完全明显,它是直接相关的(至少没有用这样的术语阐明)。
@spender - 如果我理解正确的话,标题比较是here https://gist.github.com/mikeomeara1/b2bf4f18099c8705471b7f895c7cc0fb。如果没有,请告诉我,我会给你任何你想看的东西。
茶叶似乎表明存在一个已知问题。所以,问题是;有办法解决这个问题吗?我们刚刚经历了(非常痛苦的)1.1 到 2.x 的升级,希望这个问题能够得到解决,而让我们的服务器再运行一个月/一个季度/一年让我们非常担心。我们正在开发的系统的体积正在大大扩大。
因此,任何变通办法、黑客或疯狂的想法都是受欢迎的。