.Net WebSocket原型...在Javascript中打开连接时出现问题

时间:2011-07-08 20:50:22

标签: javascript c#-4.0 websocket

您好我的C#.Net解决方案中有Web应用程序和控制台应用程序。我试图从我的Web应用程序调用我的控制台应用程序中的ReverseService类。在static void Main函数的Console Application中,我运行以下代码:

var host = new WebSocketsHost<ReverseService>(new Uri("ws://localhost:4502/reverse"));
host.AddWebSocketsEndpoint();
host.Open();
Console.ReadLine();

我正在尝试使用Chrome 12中的以下Javascript代码从我的Web应用程序调用此WebSocketEndpoint。

if (window.WebSocket) {
            //establishes websocket connection
            websocket = new WebSocket('ws://localhost:4502/reverse');

            websocket.onopen = function () {
                $('body').append('Connected.');

                $('#inputbox').keyup(function () {
                    websocket.send($('#inputbox').val());
                });
            };

            websocket.onclose = function () {
                $('body').append('Closed.');
            }

            websocket.onmessage = function (event) {
                $('#outputbox').val(event.data);
            };
        }

websocket.onclose函数确实被调用了,但websocket.onopen函数从未这样做过。我用Google搜索并在这里查看但无济于事,我们将非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

错误几乎肯定是客户端和服务器的协议版本之间的不匹配。看起来您正在使用HTML5 labs prototype - 如果您使用的是最新版本,那么您的服务器正在使用WebSockets hybi-09。 Chrome实现了一个更旧版本的协议(我认为它是hixie-76,但我不确定)。

您的选择是:

  • 使用实现hixie-76
  • 的WebSocket服务器
  • 使用其他客户端实现。例如,您可以使用HTML5 labs原型提供的实现。它是一个带有JavaScript包装器的Silverlight插件。您需要包含一些脚本并使用new WebSocketDraft而不是new WebSocket。您还需要删除wwwroot中的clientaccesspolicy.xml文件 - 有关详细信息,请参阅原型自述文件。有关详细信息,请查看一些示例。

答案 1 :(得分:0)

使用TCP数据包嗅探器观察协议握手。

使用两种协议进行成功测试:

  1. hybi-00 / hixie-76:Firefox 5.0,Safari 5.1.1使用这个旧协议与Sec-WebSocket-Key1 / Key2 ... C#中有几个免费的服务器源代码。 例如,搜索WebSocket76English.zip。它甚至适用于iPhone上的Safari。

  2. hybi-06:Firefox 7.0,Chrome 14正在使用Sec-WebSocket-Key的最后一个协议。 最后一个.Net WebSocket原型使用该协议。

  3. 如果某人有支持旧协议hybi-00的WebSocket原型版本,请告诉我。

    最后一个规范草案建议服务器可以支持多种协议并告知 Sec-WebSocket-Version。字段中支持的版本。