你好,我有一个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数据包嗅探器监视协议握手
两个协议的成功测试:
-
hyby -00/hixie-76: Firefox 5.0, Safari 5.1.1使用这个旧的协议与Sec-WebSocket-Key1/Key2…有几个免费的c#服务器源代码。例如,搜索WebSocket76English.zip。
-
hyby -06: Firefox 7.0, Chrome 14使用的是带有Sec-WebSocket-Key的最新协议。上一个。net WebSocket原型使用了这个协议
如果有人有支持旧协议hybi-00的WebSocket原型版本,请告诉我。
最后的规范草案建议服务器可以支持多个协议并告诉字段Sec-WebSocket-Version.