Подключение к веб-заданию Azure из клиента через гибридное подключение
У меня есть локальный сервер (mockhospital1), и у меня есть веб-приложение Azure в плане обслуживания приложений.
Я создал гибридное соединение из этого веб-приложения Azure для связи с сервером A, и я загрузил HCM на сервер A и добавил туда соединение (все работает правильно).
Я могу открыть сокет слушателя (используя приложение aC# console) на mockhospital1:
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, 2113));
listener.Listen(100);
Затем я создал веб-задание в своем веб-приложении Azure, которое отправляет в этот сокет через HC:
IPHostEntry ipHost = Dns.Resolve("mockhospital1");
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 2113);
Socket sender = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(ipEndpoint);
Это хорошо работает.
Сейчас я пытаюсь подключиться противоположным способом (инициируя отправку из mockhospital1 в Azure).
Я пытаюсь добиться отправки данных через тот же HC через порт 2113 из mockhospital1 непосредственно в прослушиватель, который я создал в веб-задании Azure. Я изо всех сил пытаюсь найти способ сделать это. Я не уверен, как настроить отправляющий сокет.
Вот что у меня есть в Azure WebJob (просто настраиваю прослушиватель на правильный порт - 2113):
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, 2113));
listener.Listen(100);
Я не уверен, как подключиться к этому, чтобы отправить из mockhospital1, хотя. Я попробовал следующий код (думаю, мне действительно нужно знать, каким должен быть IP_HOST_NAME):
byte[] receivedBytes = new byte[1024];
IPHostEntry ipHost = Dns.Resolve(IP_HOST_NAME);
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 2113);
Socket sender = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(ipEndpoint);
Мне интересно, есть ли у кого-нибудь представление о том, как я могу достичь того, что я хочу сделать, или я иду по этой проблеме неправильно.
1 ответ
Существуют многочисленные ограничения в отношении доступа к сети из веб-приложения Azure.
Единственный способ получить доступ к приложению через Интернет - через уже выставленные порты HTTP(80) и HTTP (443) TCP, приложения могут не прослушивать на других портах пакеты, поступающие из Интернета.
Однако приложения могут создать сокет, который может прослушивать соединения из песочницы. Например, два процесса в одном приложении могут взаимодействовать друг с другом через сокеты TCP; Попытки подключения, поступающие извне "песочницы", хотя они и находятся на одной машине, не будут выполнены.
Для более подробной информации, вы можете обратиться к этой статье.