Azure-docs: Azure应用服务Linux容器-Web套接字握手错误503

创建于 2020-03-01  ·  46评论  ·  资料来源: MicrosoftDocs/azure-docs

环境

  • Azure应用服务Linux容器,默认设置,启用了WebSockets
  • AspNet Core 3.1服务器端Blazor默认项目

问题

使用Web套接字(例如Blazor)时,套接字连接在客户端失败,并显示以下错误:

Error during WebSocket handshake: Unexpected response code: 503

问题是众所周知的:
https://github.com/MicrosoftDocs/azure-docs/issues/19578
https://github.com/MicrosoftDocs/azure-docs/issues/31771
https://github.com/dotnet/aspnetcore/issues/10370

可悲的是,所有问题都没有任何解决办法而关闭。

根据上面列出的问题,问题的根源可能是WebSocket上的perMessageDefalate设置(似乎无法使用Blazor Server Side进行配置)。 此处还记录了使用App Service Linux Contains的WebSockets的限制:
https://docs.microsoft.com/zh-CN/azure/app-service/containers/app-service-linux-faq#language -support

其他人报告说,问题与CORS和身份验证设置有关:
https://stackoverflow.com/a/58240309

知道这是将要修复的漏洞还是按设计的方式工作的漏洞将非常有趣。


文件详细资料

不要编辑此部分。

Pri3 app-servicsvc cxp escalated-product-team product-bug triaged

最有用的评论

@ AjayKumar-MSFT:我正在使用S1应用服务计划而不是免费应用服务计划来解决此问题。

因此,看起来Linux目前根本不支持Web套接字吗? 你能在这里澄清一下吗? 感谢帮助!

所有46条评论

@jlorek感谢您的查询和反馈,我们的团队将进一步调查并尽快与您联系。

我们遇到了同样的问题。

有任何更新吗? 遇到同样的问题

抱歉抱歉! 我完全理解这是一个令人沮丧的经验。 我正在与我们的产品工程团队一起检查此问题,我会尽快回发更新。

顺便提一句,通过扩展到更高的App Service Plan,我已经解决了类似的问题(WebSocket |错误503)。

@jlorek如果您可以在看到503的地方共享您的应用程序名称,那么我可以帮助您

部署默认的Blazor项目应用程序后,有什么更复杂的方法可以尝试解决此问题? 我只是尝试部署一个示例,所以可以很好地加载它。 (https://blazerlinux.tuxedoase.p.azurewebsites.net/weatherforecast)但是我承认我不是应用程序专家,所以我可能会缺少一些东西。

感谢@JennyLawrance的帮助和评论。
按照Jenny的要求, @ LANSoftwareentwicklung@ameyakarve可以直接在此处或间接共享其中一个WebApp名称吗?

默认Blazor应用适用于我们,如果您正在配置任何其他/复杂的步骤,并且希望共享存储库和确切的复制步骤,请发送电子邮件至AzCommunity [at] Microsoft [dot] com,引用此线程, WebApp名称和Azure订阅ID,我们将进一步与您联系。

感谢您的耐心配合!

@JennyLawrance - /weatherforecast API端点是Blazor客户端默认项目的一部分。 它不包含在服务器端默认项目中,因为由于服务器端应用程序体系结构而不是必需的。 您介意尝试使用服务器端项目模板dotnet new blazorserver复制吗?

@ AjayKumar-MSFT-当然,只需访问https://peakseason.azurewebsites.net
如开头所述,它是Blazor服务器端默认项目模板,该模板已部署到F1 App Service计划上的Azure App Service Linux容器(启用了WebSocket)。

我还通过在Net Core 3.1堆栈上的Linux上的Web App中将App Service与Web Service一起使用,创建了另一个没有容器的示例:
https://peakseason-code.azurewebsites.net

我尝试了F1和B1服务计划。 两者都导致相同的问题-Web套接字握手错误503。

@ AjayKumar-MSFT-我给您发送了一封电子邮件,其中包含应用程序名称和订阅ID。

@jlorek ,感谢您分享要求的详细信息。
@LANSoftwareentwicklung ,阿克。 我们已经收到您的电子邮件。

我们正在调查中,并将尽快与您联系。

@jlorek ,您能否说明看到503的是哪个URL? 我可以访问该应用程序。

我在多容器应用程序服务上遇到了同样的问题。 遇到此错误时,我正在使用带有F1层(免费)的应用程序服务计划。 阅读了一些建议之后,我尝试切换到b1层。 在b1层上重新部署多容器应用程序后,Web套接字已成功连接,而没有握手错误。

@JennyLawrance-是的,您可以访问该应用程序。 但是由于503错误,无法建立基础的WebSocket连接。 要查看此错误,只需打开浏览器DevTools。 当无法建立WebSocket连接时,使用Blazor实现了一个后备模式。 当不使用Blazor并依赖WebSockets时,由于此错误,您的整个应用程序可能会损坏。

@ classifieds-dev-尝试B1没有成功。 但是,使用P1V2服务计划,WebSocket连接对于我的项目来说就可以正常工作。

@ jlorek ,@ classifieds-dev,是的,我已经确定了一个代码问题,该问题完全阻止了免费SKU上的Web套接字。 我已经打开了我们这边的一个工作项目来解决此问题。

确定此问题后,将部署修复程序。 此外,文档将被刷新以反映所做的更改。 现在,我们将关闭该线程。 如果对此问题还有其他疑问,请在您的回复中标记我们。 我们很高兴继续讨论。

感谢大家引起我们的注意。 非常感谢您的宝贵意见。

我看到的是带有单容器F1免费套餐应用程序服务的503。

你好

所有这些解决方案都不适合我。 让我解释一下我所拥有的:

我正在使用Twilio + Azure认知服务(基于电话的对话,实时和使用Websocket)开发解决方案

从Twilio,当有电话打进来时,我向容器的WebApp发送初始POST请求(Webhook),如下所示:
_ https://my_azure_web_app.azurewebsites.net/twiml_

服务器我有一个这样的端点:

_class TwiML(tornado.web.RequestHandler):
def post(个体):
response_str ='./greetings.mp3 '
response_str + =' '
response_str + ='
'
self.finish(str(response_str))
def set_default_headers(self):
打印(“正在设置标题!!”)
self.set_header(“ Access-Control-Allow-Origin”,“ *”)
self.set_header(“ Access-Control-Allow-Headers”,“ x-requested-with”)
self.set_header(“ Sec-WebSocket-Extensions”,“ permessage-deflate”)_

我可以在localhost上启动我的应用程序,并在localhost上的容器中启动(即,我可以毫无问题地从Twilio打开Websocket到/至Twilio并打开Websocket通道)

当我将图像部署到用于容器的WebApp中并且该容器正在运行时,我可以收到音频消息的第一部分(即问候语)。 但是,在那之后,我无法打开wss websocket连接(_wss://my_azure_web_app.azurewebsites.net.azurewebsites.net/socket_),并且我总是收到来自Twilio的错误,如下所示:
流-WebSocket-连接断开的管道

(我在我的Dockerfile中使用了“ EXPOSE 8080”,在我的“配置设置” WebApp中使用了“ WEBSITES_PORT = 8080”)

容器正在运行:
2020-04-08 14:13:06.366信息-此容器未启用日志记录。
请使用https://aka.ms/linux-diagnostics启用日志记录以在此处查看容器日志。
2020-04-08 14:13:06.882信息-向站点my_azure_web_app的容器my_azure_web_app_8_91af842a发起预热请求
2020-04-08 14:13:10.919信息-网站my_azure_web_app的容器my_azure_web_app_8_91af842a已成功初始化,并准备服务请求。

我可以访问其网址:
https://my_azure_web_app.azurewebsites.net/

我可以使用Advanced Rest Client(Google)连接到我的Websocket频道
“已连接到wss://my_azure_web_app.azurewebsites.net/socket

当我尝试从Twilio打开“ wss://my_azure_web_app.azurewebsites.net/socket ”时,我认为一切都很好,但是不可能

我尝试了一切都没有成功(龙卷风服务器和Azure)。 所以:

  1. 容器Web应用
    1.1。 CORS:为空(并且:允许的来源“ *”)。 两者都没有成功。
    1.2。 WebSockets启用(“打开”)
    1.3。 扩大服务计划(P1V2)
  2. 龙卷风服务器:
    2.1。 设置标题“ Access-Control-Allow-Origin”,“ *”
    2.2。 设置标题“ Sec-WebSocket-Extensions”,“ permessage-deflate”(是否有必要?)

最后,我没有将我的应用程序运行到容器的Web App中
我用尽了我的想法。

任何人都可以告诉新的尝试方法吗?

在此先多谢!

@lopejum ,为了进一步了解,我已经回复了您的其他GitHub线程。 感谢您的评论。

为什么关闭此问题? 截止到今天,它仍不适用于免费套餐。 是否有参考,以便我们可以进行查看并在将修补程序部署到Azure时收到通知?

Blazor 3.1和Linux App Service(B1)仍然存在此问题。 我们可以重新打开或发布有关此建议的明确建议吗?

就像在第一篇文章中已经提到的那样,这个问题似乎众所周知,但是所有问题在没有提供任何解决方案的情况下就被关闭了。 似乎有点奇怪。 @ AjayKumar-MSFT有关修复进度的任何信息吗?

根据反馈,我们对此文档进行了更新-“免费应用服务计划上的Linux应用当前不支持Web套接字。我们正在努力消除此限制,并计划在免费应用服务上最多支持5个Web套接字连接计划。”

@JennyLawrance ,请求您进一步的帮助和意见。

@ AjayKumar-MSFT:我正在使用S1应用服务计划而不是免费应用服务计划来解决此问题。

因此,看起来Linux目前根本不支持Web套接字吗? 你能在这里澄清一下吗? 感谢帮助!

@ JennyLawrance ,@ AjayKumar-MSFT:友好的提醒...

刚刚验证过,使用WebSockets进行的类似设置在Windows App上有效,但在Linux上则无效。 这与选择哪种定价层无关。

这里可能合并了多个问题:
确定了不能免费使用的Websocket,我们将对此进行修复。

@thomaux ,能否给我您已设置的应用程序网址(将电子邮件发送至jennylaw(at)microsoft(dot)com,我们可以进行调查。

@ AjayKumar-MSFT

根据反馈,我们对此文档进行了更新-“免费应用服务计划上的Linux应用当前不支持Web套接字。我们正在努力消除此限制,并计划在免费应用服务上最多支持5个Web套接字连接计划。”

@JennyLawrance ,请求您进一步的帮助和意见。

请,免费应用服务计划代表什么? 我有一个100美元免费信用的学生订阅,并且我在B1计划上运行网络套接字。 这也算作免费计划吗? Websocket URL响应为503。

WebSocket connection to 'ws://wsstestivo.azurewebsites.net/?encoding=text' failed: Error during WebSocket handshake: Unexpected response code: 503

运行此映像: https :

今天,突然之间,我的Linux应用程序服务开始与Web套接字连接一起正常使用。
这是Blazor服务器端应用程序S1 App Service Plan。

发生什么了? 你能说明点什么吗? 我们最近没有执行任何部署或设置更改。

@JennyLawrance对此有任何更新吗? 我已通过电子邮件将应用程序的URL发送给您

我们上周五开始随机收到此问题。 我们所有的应用服务计划都是Linux。

我们的客户无法根据B3应用服务计划建立与我们服务之一的Websocket连接。 该服务已经部署了几个月,并且我们从未遇到任何websocket连接问题(或与此相关的任何连接问题)。

我尝试几次重新启动应用程序服务,但均不起作用。 最后,看到此线程后,我将应用程序服务从其原始的B3应用程序服务计划移至了我们正在使用的其他B1应用程序服务计划。 这为我们解决了这个问题。

然后,我们尝试将应用程序服务移回原始的B3应用程序服务计划,但是问题再次发生。

这对我们来说非常混乱,我们已经向Azure发送了一张支持票。

我认为我们暂时不会对B3应用服务计划或受影响的应用服务进行任何更改。

同样的错误

failed: Error during WebSocket handshake: Unexpected response code: 503

应用服务计划:LinuxContainerAppServicePlan(P1v2:1)

Linux B1上的相同问题

使用Linux B1时出现相同的问题,但是切换到Windows时可以使用。

切换Linux B1→Linux B2然后再切换回帮助

对这个问题的最新回应和沮丧深表歉意。 我们一直在内部进行讨论。
对于仍然遇到此问题的任何人,是否可以参考此线程,WebApp名称和Azure订阅ID,将主题行为“ Attn:Ajay ”的电子邮件发送给AzCommunity [at] Microsoft [com],以便进行更深入的调查将对此进行进一步跟进。

感谢您的耐心配合!

从免费的F1计划切换到B2已成功。 但是,切换回F1时,错误会再次出现。 我不确定F1计划是否不支持websocket。

我的错误:WebSocket握手期间错误:意外的响应代码:503

从免费的F1计划切换到B2已成功。 但是,切换回F1时,错误会再次出现。 我不确定F1计划是否不支持websocket。

我的错误:WebSocket握手期间错误:意外的响应代码:503

@Sijoma ,感谢您的更新。 是的,如本文档所述-“免费应用程序服务计划上的Linux应用程序当前不支持Web套接字。 我们正在努力消除此限制,并计划在Free App Service计划中最多支持5个Web套接字连接。” -我们的产品小组正在努力,但目前没有ETA可供共享。

它们也不适用于付费计划(B1)。

它们也不适用于付费计划(B1)。

有类似问题的用户可以通过切换计划-B1-> B2-> B1来解决此问题,请查看是否对您有效。 提到了这一点,我正在内部进行讨论,并将回发更多更新。

这对Windows Free实例有效吗? 还是websocket超出了免费实例的范围?

这对Windows Free实例有效吗? 还是websocket超出了免费实例的范围?

我们在Windows中的免费SKU中允许5个websocket连接。

我只想在这里补充我的经验。 Web套接字无法在linux Web应用程序上工作时,我也遇到类似的问题。
对我来说,它可以升级到B2。 Websockets在F1和B1上根本不起作用。

必须升级到Linux B2才能正常工作。

同样,在F1或B1上没有运气,当升级到B2后,它立即开始工作。

对我来说,Linux B2也能正常工作。 B1和F1没有。

在我的多容器Web应用程序上,websocket可以运行,但是仍然抛出错误。 使用Nginx,Node.js

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

bityob picture bityob  ·  3评论

bdcoder2 picture bdcoder2  ·  3评论

spottedmahn picture spottedmahn  ·  3评论

Ponant picture Ponant  ·  3评论

behnam89 picture behnam89  ·  3评论