XSockets / WebSockets недоступны с другого компьютера, кроме хостингового

#c# #.net #html #websocket #xsockets.net

#c# #.net #HTML #websocket #xsockets.net

Вопрос:

Я разрабатываю сайт с использованием WebSockets и использую XSockets.NET для реализации всего сервера WebSockets.

Кроме того, я могу добраться до XSocket.СЕТЕВОЙ контроллер с компьютера разработки, но я не могу связаться с ним с другого компьютера.

Кстати, это не проблема DNS, потому что сам веб-сайт доступен для просмотра с любого другого компьютера: это что-то с WebSockets.

В настоящее время я получаю следующую ошибку в Firebug: Firefox не может установить соединение с сервером […], где сервер — это полное имя хоста на порту 7532.

Я могу предоставить пример кода того, как я настраиваю и запускаю весь сервер WebSockets:

 IXSocketServerContainer server = Composable.GetExport<IXSocketServerContainer>();
List<IConfigurationSetting> serverConfig = new List<IConfigurationSetting>();
serverConfig.Add(new ConfigurationSetting("ws://[host name]:7532", new HashSet<string> { "*" }));
server.StartServers(configurationSettings: serverConfig);
 

Кроме того, все XSockets.NET размещается в службе Windows, и я подключаюсь к XSocket.СЕТЕВОЙ контроллер, использующий готовые XSockets.NET JavaScript API:

 // This will work as expected when I open my site from the development machine
var conn = new XSockets.WebSocket("ws://[host name]:7352/[controller name]");

conn.on(XSockets.Events.open, function (clientInfo) {
    conn.subscribe("[Action name]", function (message) {
    });
});
 

Что помешало бы другим машинам подключаться ко всему серверу WebSocket? Чего мне не хватает?

Ответ №1:

Я решил это, и это минимальное изменение.

Кажется, что XSockets.NET требует настроить WebSocket для прослушивания любого IP-адреса и любого хоста. То есть весь хост должен быть 0.0.0.0:7532 .

Удивительно, но я нашел решение в комментарии к этому XSockets.Страница сетевой документации (создание пользовательской конфигурации …):

VJ: Хорошо. Итак, у меня есть обновление проблемы, о которой я упоминал выше. Возможное решение, которое в любом случае для меня.

  1. В CustomConfigLoader я собираюсь добавить ip-адрес как 0.0.0.0, что означает, что мой сервер XSockets будет прослушивать с любого IP-адреса. Следовательно, код будет выглядеть следующим образом: var url=»ws://0.0.0.0:4502/»;
  2. В Javascript я буду использовать window.Расположение.имя хоста, которое указывает на хост приложения, по сути, на сервер, как известно клиенту, с которым я использую свои XSockets.

Второй шаг уже был тем, что я сделал в своем коде, и первым было то, что сделало трюк (в моем случае я не использовал CustomConfigLoader, но я просто добавил ConfigurationSetting в 0.0.0.0:7352 качестве IP-адреса хоста / имени хоста).

Ответ №2:

Можете ли вы на самом деле увидеть, что порт открыт извне, если вы запустите сканирование TCP?

Вы пытались использовать wss:// (безопасное) соединение? У вашего сервиса или хостинг-провайдера может быть прозрачный прокси, который не поддерживает websocket. Переход на безопасный режим позволяет избежать проблем с прокси-серверами.

В последней версии нет документации для SSL / TLS XSocket.net , но, вероятно, он очень похож на более старую версию.

Комментарии:

1. Я полагаю, вы о многом догадались! Я не размещаю его во внешней компании. Машина разработки — это виртуальная машина, и она работает там, и если я попытаюсь получить доступ к сайту с хост-компьютера или, например, с моего планшета, весь веб-сокет недоступен. Я пробовал telnet [host] [port] , но он не работает как на виртуальной машине, так и на внешнем компьютере.

2. Кроме того, я отключил брандмауэр Windows как на виртуальной машине, так и на хост-компьютере.