OWIN Katana Self Hosted Websocket Server не возвращает протокол

Я пытаюсь написать сервер веб-сокетов, используя OWIN/Katana. Я следую приведенному здесь образцу: http://aspnet.codeplex.com/sourcecontrol/latest#Samples/Katana/WebSocketSample/WebSocketServer/Startup.cs

А теперь мой клиентский код:

        var connection = new WebSocket('ws://localhost:5000/game', 'kmud');
    connection.onopen = function () {
        connection.send('Ping');
    };

Проблема, с которой я сталкиваюсь, заключается в том, что когда этот код выполняется, соединение прекрасно достигает сервера, и сервер ПОЧТИ отправляет правильные вещи обратно, но есть одна проблема: протокол, возвращенный с сервера, неверен. Всегда пусто.

Вот запрос:

Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:Upgrade
Host:localhost:5000
Origin:null
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:7Q3r81ZhvtCSmbbUnVRUXA==
Sec-WebSocket-Protocol:kmud
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36

А потом ответ:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Server: Microsoft-HTTPAPI/2.0
Sec-WebSocket-Protocol: 
Connection: Upgrade
Sec-WebSocket-Accept: u/0CCzacjw8KKJd0UjKW0xuJFU4=
Date: Thu, 12 Mar 2015 19:14:02 GMT

Обратите внимание, что протокол пуст в ответе. У моего браузера есть проблема с этим, и он выдает исключение:

WebSocket connection to 'ws://localhost:5000/game' failed: Error during WebSocket handshake: 'Sec-WebSocket-Protocol' header value '' in response does not match any of sent values

Так что я пробовал много типов различных протоколов; включая '', null, 'мыло' и ['мыло', 'json'], но ничего не сработало. Всякий раз, когда я проверял контекст на сервере, протокол представлялся как массив с одним элементом, содержащим пустую строку.

Что я здесь делаю неправильно?


person Ron Penton    schedule 12.03.2015    source источник


Ответы (1)


В запросе у вас есть заголовок Sec-WebSocket-Protocol:kmud. Ответ также должен содержать этот заголовок и ровно одно значение из запроса (или отправить ответ об ошибке, если ни одно из них не распознано или не приемлемо). В этом случае запрос имеет только один вариант, так что это должен быть простой выбор :)

Дополнительные сведения см. в RFC.

person Stylpe    schedule 07.04.2016