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