c# 4.0 - .Net WebSocket Prototype...Trouble Opening Connecti

c# 4.0 - .Net WebSocket Prototype...Trouble Opening Connection in Javascript

本文关键字:Prototype Trouble Opening Connecti WebSocket Net      更新时间:2023-09-26

你好,我有一个Web应用程序和一个控制台应用程序在我的c# . net解决方案。我试图从我的Web应用程序调用控制台应用程序中的ReverseService类。在控制台应用程序中的静态void Main函数中,我正在运行以下代码:

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

我试图调用这个WebSocketEndpoint从我的Web应用程序与以下Javascript代码在Chrome 12。

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函数从不这样做。我已经在谷歌上搜索过了,但是没有任何帮助,如果有任何帮助,我将不胜感激。

这个错误几乎可以肯定是客户机和服务器的协议版本不匹配。看起来你正在使用HTML5实验室的原型——如果你使用的是最新版本,那么你的服务器正在谈论WebSockets hybi-09。Chrome实现了一个更老版本的协议(我认为是hixie-76,但我不确定)。

你的选择是:

  • 使用WebSocket服务器实现hixie-76
  • 使用不同的客户端实现。例如,您可以使用HTML5实验室原型提供的实现。它是一个带有JavaScript包装的Silverlight插件。您需要包含一些脚本,并使用new WebSocketDraft而不是new WebSocket。您还需要删除wwwroot中的clientaccessppolicy .xml文件——更多信息请参见原型自述文件。查看一些样本以获取更多信息。

使用TCP数据包嗅探器监视协议握手

两个协议的成功测试:

  1. hyby -00/hixie-76: Firefox 5.0, Safari 5.1.1使用这个旧的协议与Sec-WebSocket-Key1/Key2…有几个免费的c#服务器源代码。例如,搜索WebSocket76English.zip。

  2. hyby -06: Firefox 7.0, Chrome 14使用的是带有Sec-WebSocket-Key的最新协议。上一个。net WebSocket原型使用了这个协议

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

最后的规范草案建议服务器可以支持多个协议并告诉字段Sec-WebSocket-Version.