开发者

.Net WebSocket Prototype...Trouble Opening Connection in Javascript

开发者 https://www.devze.com 2023-03-18 20:50 出处:网络
Hi I have a Web Application and a Console Application in my C# .Net solution.I am trying to call a ReverseService class in my Console A开发者_JAVA百科pplication from my Web Application.In the Console

Hi I have a Web Application and a Console Application in my C# .Net solution. I am trying to call a ReverseService class in my Console A开发者_JAVA百科pplication from my Web Application. In the Console Application in the static void Main function I am running the following code:

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

I am trying to call this WebSocketEndpoint from my Web Application with the following Javascript code in 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);
            };
        }

The websocket.onclose function does in fact get called, but the websocket.onopen function never does. I've googled and looked on here but to no avail, any help would be greatly appreciated.


The error is almost certainly a mismatch between the protocol versions for your client and server. It looks like you are using the HTML5 labs prototype - if you are using the most recent version then your server is talking WebSockets hybi-09. Chrome implements a much older version of the protocol (I think its hixie-76 but I am not certain).

Your options are:

  • Use a WebSocket server that implements hixie-76
  • Use a different client implementation. For example, you could use the implementation that is provided with the HTML5 labs prototype. Its a Silverlight plugin with a JavaScript wrapper. You need to include a few scripts and use new WebSocketDraft instead of new WebSocket. You will also need to drop the clientaccesspolicy.xml file in your wwwroot - see the prototype readme file for more info. Have a look at some of the samples for more info.


Use a TCP packet sniffer to watch the protocol handshake.

Successful tests with two protocols :

  1. hybi-00/hixie-76 : Firefox 5.0, Safari 5.1.1 use this old protocol with Sec-WebSocket-Key1/Key2... There are several free server source codes in C#. For example search WebSocket76English.zip. It works even with Safari on iPhone.

  2. hybi-06 : Firefox 7.0, Chrome 14 are using the last protocol with Sec-WebSocket-Key. The last .Net WebSocket prototype use that protocol.

If someone has a version of WebSocket prototype supporting the old protocol hybi-00, please let me know.

The last specification draft suggest that a server can support several protocols and tell about the supported versions in field Sec-WebSocket-Version.

0

精彩评论

暂无评论...
验证码 换一张
取 消