我们已经在本地开发了NodeJS / Express网络应用程序,并添加了一些利用服务器发送事件(SSE)的新功能。在本地进行测试时,客户端可以通过SSE连接到服务器,注册服务器并从服务器接收更新。但是,当我们将Web应用程序部署到Azure时,要求SSE的功能无法正常工作。客户端可以发起连接,但是服务器可以看到连接,但是随后连接立即关闭,客户端收到状态为500 /服务器内部错误的消息。我们首先要确定故障的确切点,然后是如何纠正,因为我们假设IIS或IISnode中的某些东西正在占用响应。
我们已经遍及互联网,但我们实施的任何措施似乎都无济于事。我们已经尝试了几乎所有可以找到的配置组合。我摘录了下面的web.config的相关部分,我们知道应该将对websocket和相关传输的控制权传递给底层的nodejs服务器,而不是让iis或iisnode处理它。我们还打开了Web套接字,并且始终在配置中打开,但无济于事。
web.config
<system.webServer>
<webSocket enabled="false" />
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode" responseBufferLimit="0" />
.
.
.
<iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade" flushResponse="true" />
我们希望Azure部署应该能够在本地完成它的工作-连接到服务器的客户端将通过SSE接收所有广播,但相反,它们只收到500条/内部服务器错误消息。
答案 0 :(得分:0)
@ tbr123psu这个问题缺少一些细节,没有这些细节很难指出正确的方向。例如,我看到您正在使用Windows产品来托管您的Node应用程序,并且您还指出状态代码为500。了解什么是子状态很重要,因为它提供了有关问题可能出在哪里的指针。参见此IISNODE http status and Substatus。
注意:在Windows App Service Plan上,IIS被用作基础Web服务器。对于Node.JS应用程序,IIS使用 IISNode 处理请求。
此外,我建议您为Azure Web App打开应用程序日志记录。该选项在门户网站的诊断日志下可用。引用此:Azure Web App: How to enable diagnostics
请参阅此博客文章,了解如何调试Azure应用服务上托管的Node.JS应用:https://azureossd.github.io/2015/08/19/debug-node-js-web-apps-on-azure/
启用日志记录后,发出的数据将使您指向导致故障的原因。