Подключение к веб-заданию 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; Попытки подключения, поступающие извне "песочницы", хотя они и находятся на одной машине, не будут выполнены.

Для более подробной информации, вы можете обратиться к этой статье.

Другие вопросы по тегам