对于POST请求,IIS ARR返回502,但对GET很好

概要

我正在使用ARR进行虚拟应用程序的零宕机蓝/绿部署。

GET请求正常工作,但通过ARR发送到虚拟应用程序中运行的ASP.NET站点的POST请求会在ARR中指定的超时后返回502.3错误。 失败请求跟踪显示BytesReceived =“0”,就好像POST请求丢失一样。 如果直接向ARR后面的站点发送POST请求,则工作正常。

build立

我已经设置了应用程序请求路由(ARR),作为同一服务器上的两个网站的反向代理,一次只有其中一个网站标记为“健康”。 这是为了实现零宕机ASP.NET部署,所以可以在发送stream量之前预热站点。

我们的Web应用程序由两个代码库组成,其中一个作为根网站,另一个作为/app/的虚拟应用/app/ 。 因此请求subdomain.myurl.com/app/whatever去虚拟应用程序。 这只是我希望使用ARR的第二个代码库。

WEB – > subdomain.myurl.com/app/ – >服务器场 – > SiteA/app/ SiteB/app/

服务器上有一个URL重写规则,它将任何具有特定子域和path/应用*的请求redirect到Web场。

SiteA和SiteB被设置为每个都有一个虚拟的应用程序也使用path /app/

问题

GET subdomain.myurl.com/app/返回带有login表单的页面。

带有填写表单字段的POST请求subdomain.myurl.com/app/在服务器场代理设置中指定的超时后导致502错误。

我可以断言,应用程序不会超时 – 在将相同的请求直接发送到站点而不是通过ARR返回200ms内。

失败的请求追踪

对于在服务器场代理超时(已尝试30,60和300秒)中设置的值, GENERAL_READ_ENTITY_STARTGENERAL_READ_ENTITY_END之间的时间戳之间存在差距。

这是输出:

NOTIFY_MODULE_STARTModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", fIsPostNotification="false"

GENERAL_READ_ENTITY_START

代理超时的时间戳延迟

GENERAL_READ_ENTITY_ENDBytesReceived="0", ErrorCode="The I/O operation has been aborted because of either a thread exit or an application request. (0x800703e3)"

NOTIFY_MODULE_COMPLETION with ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", fIsPostNotificationEvent="false", CompletionBytes="0", ErrorCode="The I/O operation has been aborted because of either a thread exit or an application request. (0x800703e3)"