Я хотел бы запустить сервер 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");
}
Статус меняется на закрыт
через несколько секунд после загрузки страницы.
Моя конечная точка для рабочей роли ниже:
WebSocket Input http 8080
Теперь я попытался выполнить привязку к внутреннему IP-адресу, используя следующее:
RoleEnvironment.CurrentRoleInstance.InstanceEndpoints [" WebSocket "]. IPEndpoint.ToString ();
РЕШЕНИЕ
Ради того, чтобы кто-нибудь еще столкнулся с этим при реализации веб-сокетов в Azure;
Ваш брандмауэр, вероятно, отклонит ваше соединение, если не на порте 80 или 8080, поэтому создайте отдельное развертывание для него.
Конечная точка должна быть установлена на TCP, а не на HTTP, чтобы были созданы правильные правила брандмауэра. (см. изображение)