Я пытаюсь написать сервер веб-сокетов, используя 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'], но ничего не сработало. Всякий раз, когда я проверял контекст на сервере, протокол представлялся как массив с одним элементом, содержащим пустую строку.
Что я здесь делаю неправильно?