SignalR 核心,错误:'Sec-WebSocket-Accept'标头值'u1mOHwcpjPm7txGcxCm1jVmOgjo='无效



我正在尝试在.Net core 2.0Web应用程序中实现SignalR Core,并在Xamarin.Android应用程序中实现客户端。 我创建了一个新的 .Net core 2.0 Web 应用解决方案,并导入了Microsoft.AspNetCore.SignalR并设置了 Startup.cs 文件,如以下示例所示

https://github.com/aspnet/SignalR-samples/blob/master/ChatSample/ChatSample/Startup.cs

我的代码:

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseFileServer();
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("chat");
});
}
}

此项目已部署到 Amazon Elastic Bean Stalk。

在客户端,我已经导入了Microsoft.AspNetCore.SignalR.Client并初始化了一个连接,如本示例中所示

https://github.com/aspnet/SignalR-samples/blob/master/XamarinAndroidChatClient/XamarinAndroidChatClient/MainActivity.cs

我的代码:

public async override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
hubConnection = new HubConnectionBuilder()
.WithUrl("http://*******.eu-central-1.elasticbeanstalk.com/chat")
.Build();
try
{
await hubConnection.StartAsync();
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.StackTrace);
}
}

但是.StartAsync()抛出此异常:

{System.Net.WebSockets.WebSocketException (0x80004005): 'Sec-WebSocket-Accept' 标头值 'LNqQiPhES/zOwW10TMji4AVvvoA=' 无效。 at System.Net.WebSockets.WebSocketHandle.ValidateAndTrackHeader (System.String targetHeaderName, System.String targetHeaderValue, System.String foundHeaderName, System.String foundHeaderValue, System.Boolean& foundHeader) [0x0002c] in <6c708cf596db438ebfc6b7e012659eee>:0 '

我找到了这篇与亚马逊ELB和设置网络套接字相关的帖子

(Elastic Beanstalk 剥离 Sec-WebSocket-Accept 标头)

也发现这篇文章有同样的问题

(https://forums.aws.amazon.com/thread.jspa?messageID=613220)

就像这篇文章一样,如果我选择"LongPolling"作为传输,事情就会正常

hubConnection = new HubConnectionBuilder()
.WithUrl("http://*******.eu-central-1.elasticbeanstalk.com/chat")
.WithTransport(TransportType.LongPolling)
.Build();

建议这家伙将负载均衡器侦听器从HTTP切换到TCP,我试过这个,但问题仍然存在 我还阅读了在 AWS 管理控制台上的 ISS 中安装 websockets 的建议,但我在任何地方都找不到此选项?

感谢任何形式的帮助或建议

您需要登录到 Elastic BeanStalk 服务器并在服务器管理器的服务器角色中启用 Websocket 协议,这为我修复了它。

相关内容

  • 没有找到相关文章

最新更新