SignalR Core 未在 Azure 应用服务中使用 Websocket
Posted
技术标签:
【中文标题】SignalR Core 未在 Azure 应用服务中使用 Websocket【英文标题】:SignalR Core not using Websockets in Azure App Service 【发布时间】:2018-04-13 14:52:37 【问题描述】:我正在开发一个使用以下堆栈的 SignalR Core Web 应用程序:
ASP.NET Core 2.1 预览版 2 (2.1.0-preview2-final) SignalR Core 1.0 预览版 2 (1.0.0-preview2-final) Microsoft.AspNetCore.Cors (2.1.0-preview2-final) Microsoft.AspNetCore.WebSockets (2.1.0-preview2-final)客户端正在使用 SignalR NPM 包 (@aspnet/signalr)。
应用配置如下:
public void ConfigureServices(IServiceCollection services)
services.AddCors(options =>
options.AddPolicy(
"CorsPolicy",
builder => builder
.AllowCredentials()
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
);
services.AddSignalR();
public void Configure(IApplicationBuilder app)
app.UseCors("CorsPolicy");
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseWebSockets();
app.UseSignalR(routes =>
routes.MapHub<ClientHub>("/hubs/notifications");
);
在http://localhost
本地运行时,客户端使用WS协议进行连接。但是在 Azure App Service 中部署时,它会回退到 SSE。
浏览器日志显示:
WebSocket connection to 'wss://xxxxxx.azurewebsites.net/hubs/notifications?id=ZRniWKpMLMPIyLhS5RSyAg' failed: Error during WebSocket handshake: Unexpected response code: 503
Information: SSE connected to https://xxxxxx.azurewebsites.net/hubs/notifications?id=ig47oOdQzbasdgrlr0cHaw
negotiate
方法似乎恢复了对 Websockets 的支持:
"connectionId":"ZRniWKpMLMPIyLhS5RSyAg",
"availableTransports":[
"transport":"WebSockets","transferFormats":["Text","Binary"],
"transport":"ServerSentEvents","transferFormats":["Text"],
"transport":"LongPolling","transferFormats":["Text","Binary"]]
我错过了什么吗?还是不支持 WSS?
【问题讨论】:
您是否在 Azure 应用服务实例上启用了 WS? /facepalm 我没看到有这样的设置 【参考方案1】:回答我自己的问题,Websocket 连接失败不是 ASP.NET Core 或堆栈的问题,而是由于 Azure 应用服务需要在 应用程序设置:
【讨论】:
我在我的网络应用程序上看不到该设置,我只看到 Always On,还有其他设置可以启用吗? 他们仍然在那里,显然已经过去了一年多,因为这个答案和 UI 必然会改变。设置 > 配置,然后在常规设置选项卡中。这可能是您的应用服务定价层的限制? 您好,感谢您的重播并打算更新此内容。我做了一些研究,结果发现该功能目前不适用于 Linux 主机,但您可以启用 ARR Affinity with always on 以实现类似的行为。我确实同意原件是旧的,目的是试图找出我是否遗漏了一些东西。 嗨,有一个问题。使用套接字部署了 asp.net web api。它在天蓝色托管后在本地工作,但它不起作用。我们已经在 Azure App 服务中启用了 websocket。但没有得到连接。建立连接时应该出错。【参考方案2】:2022相关答案。
要在现代控制台上启用 Web 套接字,请转到 Home -> App Services -> your_app_name -> (Settings) Configuration -> General Settings
并将 Web sockets
属性设置为 On
。
【讨论】:
以上是关于SignalR Core 未在 Azure 应用服务中使用 Websocket的主要内容,如果未能解决你的问题,请参考以下文章
如何测试托管在Azure Appservice上的SignalR应用(负载+功能结合)?
如何在 Asp .Net Core SignalR Hub 中获取不记名令牌?
.net core 3.0 Signalr - 04 使用Redis做底板来支持横向扩展
.net core 3.0 Signalr - 04 使用Redis做底板来支持横向扩展