SignalR Core, ошибка: значение заголовка Sec-WebSocket-Accept 'u1mOHwcpjPm7txGcxCm1jVmOgjo =' недопустимо

Я пытаюсь реализовать SignalR Core в .Net core 2.0 веб-приложении и реализовать клиентскую часть в Xamarin.Android приложении. Я создал новое решение для веб-приложения .Net core 2.0, импортировал 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 =» недопустимо. в System.Net.WebSockets.WebSocketHandle.ValidateAndTrackHeader (System.String targetHeaderName, System.String targetHeaderValue, System.String foundHeaderName, System.String foundHeaderValue, System.Boolean & foundHeader `) [0x6000ec06ebc8c8c08c08c8c08c08c08c08c08c8c8c08c08c08c8c)

Я нашел этот пост, который был связан с Amazon 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();

Этому парню было предложено переключить слушателей LoadBalancer с HTTP на TCP, я попробовал это, но проблема все еще осталась. Также я прочитал предложение установить веб-сокеты в ISS на Консоли управления AWS, но я нигде не могу найти эту опцию?

Любая помощь или предложения приветствуются


person Rasmus Pedersen    schedule 03.02.2018    source источник
comment
Нет идей, помощи, предложений? Действительно?   -  person Rasmus Pedersen    schedule 09.02.2018
comment
Есть аналогичная проблема. будем ждать нашего героя.   -  person Halid    schedule 01.03.2018


Ответы (1)


Вам нужно будет войти на сервер Elastic BeanStalk и включить протокол Websocket в ролях сервера в диспетчере серверов, это исправило для меня.

person Colin Brown    schedule 28.06.2018