Запуск Fleck (или любого) сервера Websocket на Windows Azure

Я хотел бы запустить сервер WebSocket с рабочей роли в Azure.

Это нормально работает на эмуляторе, но при первом запуске сервера сокетов появляется запрос брандмауэра Windows.

Мне интересно, сможет ли кто-нибудь узнать, как преодолеть проблемы с подключением в отношении сокетов на Azure.

Реализация моего сервера сокетов: OnStart

var server = new WebSocketServer("ws://theappname.cloudapp.net:8080/");

server.Start(socket =>
{
    socket.OnOpen = () =>
    {
        Trace.WriteLine("Connected to " + socket.ConnectionInfo.ClientIpAddress,"Information");
         _sockets.Add(socket);
    };
});
.... etc

Реализация клиента:

var socket = new WebSocket("ws://theappname.cloudapp.net:8080");

socket.onopen = function () {
    status.html("Connection Opened");
};
socket.onclose = function () {
    status.html("Connection Closed");
}

После загрузки страницы статус изменяется на closed через несколько секунд.


Моя конечная точка для рабочей роли ниже:

WebSocket Input http 8080 <Not Set>


Теперь я попытался связать с внутренним IP-адресом, используя следующее:

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WebSocket"].IPEndpoint.ToString();


Решение

Для кого-то другого, сталкивающегося с этим при реализации websockets на Azure;

  • Ваш брандмауэр, вероятно, откажется от вашего соединения, если не на порту 80 или 8080, поэтому создайте для него отдельное развертывание.

  • Конечная точка должна быть настроена на TCP, а не на HTTP для правильного создания правил брандмауэра. (см. изображение)

Endpoint Configuration

Ответ 1

Просто ради испытания, почему бы вам не изменить свой входной вывод с протокола "http" на "tcp". И явно установите локальный порт на 8080 (что в вашем случае). Также вы должны иметь в виду, что Windows Azure Load Balancer убьет любое соединение, которое простаивает более 60 секунд, поэтому вам может понадобиться реализовать какое-то "пинговое" решение, чтобы открыть соединение.