Я хотел бы запустить сервер 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();
РЕШЕНИЕ
Для тех, кто сталкивается с этим при внедрении веб-сокетов в Azure;
Ваш брандмауэр, вероятно, будет запрещать ваше соединение, если он не подключен к порту 80 или 8080, поэтому создайте для него отдельное развертывание.
Конечная точка должна быть установлена на TCP, а не HTTP для правильных правил брандмауэра, которые будут созданы. (см. изображение)