OWIN Katana自托管Websocket服务器不返回协议

时间:2015-03-12 19:41:59

标签: c# websocket owin katana

我正在尝试使用OWIN / Katana编写websocket服务器。我按照此处列出的示例: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');
    };

我遇到的问题是,当执行此代码时,连接到达服务器就好了,服务器MOSTLY发回正确的东西,但是有一个问题:协议从服务器错了。它一直是空白的。

以下是请求:

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,' soap'和[' soap'' json'],但没有任何效果。每当我检查服务器中的上下文时,协议都会报告为一个包含空字符串的单个元素的数组。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

在请求中,您有标题Sec-WebSocket-Protocol:kmud。响应还需要包含此标头,其中只包含请求中的一个值(如果没有被识别或接受,则发送错误响应)。在这种情况下,请求只有一个选项,因此它应该是一个简单的选择:)

the RFC

中有更多详细信息