.Net WebSocket Prototype ... Проблемы с открытием соединения в Javascript - PullRequest
1 голос
/ 09 июля 2011

Привет У меня есть веб-приложение и консольное приложение в моем решении C # .Net.Я пытаюсь вызвать класс ReverseService в моем консольном приложении из моего веб-приложения.В консольном приложении в главной функции static void я выполняю следующий код:

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

Я пытаюсь вызвать этот WebSocketEndpoint из моего веб-приложения со следующим кодом 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 никогда не вызывается.Я гуглил и смотрел здесь, но безрезультатно, любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Используйте анализатор пакетов TCP для наблюдения за протоколом.

Успешные тесты с двумя протоколами:

  1. hybi-00 / hixie-76: Firefox 5.0, Safari 5.1.1 используют этот старый протокол с Sec-WebSocket-Key1 / Key2 ... В C # есть несколько бесплатных исходных кодов сервера. Например поиск WebSocket76English.zip. Работает даже с Safari на iPhone.

  2. hybi-06: Firefox 7.0, Chrome 14 используют последний протокол с Sec-WebSocket-Key. Последний прототип .Net WebSocket использует этот протокол.

Если у кого-то есть версия прототипа WebSocket, поддерживающая старый протокол hybi-00, сообщите мне.

В последнем проекте спецификации предполагается, что сервер может поддерживать несколько протоколов, и сообщать о поддерживаемые версии в поле Sec-WebSocket-Version.

0 голосов
/ 12 июля 2011

Ошибка почти наверняка не соответствует версии протокола для вашего клиента и сервера.Похоже, вы используете прототип HTML5 labs - если вы используете самую последнюю версию, то ваш сервер использует WebSockets hybi-09.Chrome реализует гораздо более старую версию протокола (я думаю, что это hixie-76 , но я не уверен).

Ваши варианты:

  • ИспользоватьСервер WebSocket, который реализует hixie-76
  • Используйте другую реализацию клиента.Например, вы можете использовать реализацию, которая предоставляется с прототипом HTML5 labs.Это плагин Silverlight с оболочкой JavaScript.Вам нужно включить несколько скриптов и использовать new WebSocketDraft вместо new WebSocket.Вам также нужно будет удалить файл clientaccesspolicy.xml в вашем wwwroot - для получения дополнительной информации см. Файл readme прототипа.Посмотрите на некоторые образцы для получения дополнительной информации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...