SignalR Core,错误:' Sec-WebSocket-Accept'标题值' u1mOHwcpjPm7txGcxCm1jVmOgjo ='无效

时间:2018-02-03 16:00:46

标签: asp.net-core websocket signalr elastic-beanstalk asp.net-core-signalr

我试图在.Net core 2.0 Web应用程序中实现SignalR Core,并在Xamarin.Android应用程序中实现客户端。 我创建了一个全新的.Net核心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):&#39; Sec-WebSocket-Accept&#39;标题值&#39; LNqQiPhES / zOwW10TMji4AVvvoA =&#39;是无效的。     在System.Net.WebSockets.WebSocketHandle.ValidateAndTrackHeader(System.String targetHeaderName,System.String targetHeaderValue,System.String foundHeaderName,System.String foundHeaderValue,System.Boolean&amp; foundHeader)[0x0002c] in&lt; 6c708cf596db438ebfc6b7e012659eee&gt;:0`

我发现此帖与Amazon ELB相关并设置了websockets

Elastic Beanstalk stripping Sec-WebSocket-Accept header

此帖也发现同样的问题

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

正如在这篇文章中所说,如果我选择&#34; LongPolling&#34;作为运输

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

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

赞赏任何形式的帮助或建议

1 个答案:

答案 0 :(得分:0)

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