部署在 AWS EB 后面时 SignalR 无法连接
SignalR can't connect when deployed behind AWS EB
我正在尝试在 AWS EB 中托管的应用程序上使用 SignalR,前面有一个应用程序负载均衡器。
我在本地测试时它工作得很好,但是部署时,websocket 无法建立连接 returns:
“错误:无法启动连接:错误:传输出错。”
和
“传输出错。在 WebSocket.o.onerror [如 __zone_symbol__ON_PROPERTYerror]”
我已经尝试在我的管道的最开始添加一个中间件,如果我收到对我的集线器的请求,它会记录下来,并且这有效,所以我认为它不是负载均衡器或任何与 AWS 相关的东西。
如果我用 Postman websocket 调用 URL,我会得到一个状态码 400。
我已经按照 MS 指南添加了 JWT 身份验证的配置
jwtTokenOptions.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
// If the request is for our hub...
var path = context.HttpContext.Request.Path;
if (!string.IsNullOrEmpty(accessToken) &&
(path.StartsWithSegments("/signalr")))
{
// Read the token out of the query string
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
正如我所说,它在本地运行良好。欢迎提出任何建议
我通过在 eb 实例上为 IIS 启用网络套接字来解决这个问题。
我通过使用以下命令创建一个 eb 扩展来做到这一点
commands:
01_install_websockets_feature:
command: "%SystemRoot%\System32\dism.exe /online /enable-feature /featurename:IIS-WebSockets"
ignoreErrors: true
我正在尝试在 AWS EB 中托管的应用程序上使用 SignalR,前面有一个应用程序负载均衡器。
我在本地测试时它工作得很好,但是部署时,websocket 无法建立连接 returns:
“错误:无法启动连接:错误:传输出错。”
和
“传输出错。在 WebSocket.o.onerror [如 __zone_symbol__ON_PROPERTYerror]”
我已经尝试在我的管道的最开始添加一个中间件,如果我收到对我的集线器的请求,它会记录下来,并且这有效,所以我认为它不是负载均衡器或任何与 AWS 相关的东西。
如果我用 Postman websocket 调用 URL,我会得到一个状态码 400。
我已经按照 MS 指南添加了 JWT 身份验证的配置
jwtTokenOptions.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
// If the request is for our hub...
var path = context.HttpContext.Request.Path;
if (!string.IsNullOrEmpty(accessToken) &&
(path.StartsWithSegments("/signalr")))
{
// Read the token out of the query string
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
正如我所说,它在本地运行良好。欢迎提出任何建议
我通过在 eb 实例上为 IIS 启用网络套接字来解决这个问题。 我通过使用以下命令创建一个 eb 扩展来做到这一点
commands:
01_install_websockets_feature:
command: "%SystemRoot%\System32\dism.exe /online /enable-feature /featurename:IIS-WebSockets"
ignoreErrors: true