Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Azure VM IIS HTTP状态代码已更改_Asp.net_Azure_Virtual Machine_Http Status Codes_Iis 10 - Fatal编程技术网

Asp.net Azure VM IIS HTTP状态代码已更改

Asp.net Azure VM IIS HTTP状态代码已更改,asp.net,azure,virtual-machine,http-status-codes,iis-10,Asp.net,Azure,Virtual Machine,Http Status Codes,Iis 10,我在一个基本负载平衡器后面有两个Azure虚拟机,后端池有一个HTTP URL健康探测器。为了标记服务器关闭,该URL返回状态代码503(服务不可用),但当我从这些VM调用该页面时,返回的状态代码是403。我想,这仍然可以达到预期的效果,即关闭服务器——但我不明白我设置的代码为什么会更改 这来自虚拟机上的ASP.NET web表单应用程序。我在浏览器中查看开发人员工具,从我的本地机器或本地网络上的开发服务器,该页面返回状态代码503,但从Azure中的VM调用该页面时,状态代码为403 下面是我

我在一个基本负载平衡器后面有两个Azure虚拟机,后端池有一个HTTP URL健康探测器。为了标记服务器关闭,该URL返回状态代码503(服务不可用),但当我从这些VM调用该页面时,返回的状态代码是403。我想,这仍然可以达到预期的效果,即关闭服务器——但我不明白我设置的代码为什么会更改

这来自虚拟机上的ASP.NET web表单应用程序。我在浏览器中查看开发人员工具,从我的本地机器或本地网络上的开发服务器,该页面返回状态代码503,但从Azure中的VM调用该页面时,状态代码为403

下面是我在该页面中设置状态代码的位置:

Response.Clear()
Response.StatusCode = 503
Response.Flush()
我想我应该提到我的本地服务器是一个Windows 10框,服务器VM是Windows server 2016。两者都运行IIS 10。该应用程序是使用.NETFramework 4.6编译的

以下是我的本地主机上的开发工具:

以下是azure中服务器上的开发工具:


为什么要改变?我能做些什么来停止这种行为?

所以今天我尝试启用失败的请求跟踪,但要么是设置不正确,要么是错误在别处处理,没有导致任何失败的请求被记录。
因为我没有记录任何失败的请求,所以我打开了Process Monitor,可以看到在调用我的Health Probe页面后,我立即收到一个调用我的自定义HTTP错误页面的调用。该页面一定是给出403的页面(不知道为什么,b/c该页面可以正确处理其他HTTP错误,带有友好的错误消息,并将错误记录到我的自定义错误跟踪解决方案中)

我打算更改状态代码,看看我正在设置的503是否有一些特殊的东西在IIS中得到了不同的处理,但这让我开始思考如何设置状态代码。。。 在我今天的研究中,我看到了这个页面,其中警告不要使用
Response.Flush()
。我实现的代码在
Page\u PreRender
方法中,因此实际上不需要刷新那里的代码。
我删除了响应。脸红了,当然,我的麻烦也就消失了。

健康探测页面不再触发来自Azure VM的错误,因此,我在客户端浏览器中获得的状态代码是我在代码中设置的503


所以我想这个案子结束了。我需要弄清楚为什么HTTP错误页面抛出403而不是返回友好的错误消息,但这应该很容易…

请进一步挖掘失败的请求跟踪,一旦您可以排除IIS模块的任何干扰,这完全是您的web应用程序的问题。
但是从Azure中的VM调用该页面时,状态代码是403。
在这种情况下,您是通过负载平衡器公共IP还是DNS名称来调用它?我通常使用服务器的FQDN来调用它。使用服务器的私有IP地址会得到相同的结果。如果使用公共IP,则会从负载平衡器中的另一台服务器获得响应。因为我得到的是403,健康探测器正确地失败,负载平衡器将请求路由到另一台服务器。我只是不明白为什么我设置了一个503,它被返回为403。