Вот решение, основанное на ответе службы поддержки Azure.
Вам необходимо определить публичный IP-адрес в файле .cscfg и загрузить его в облачный сервис.
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="ILPIPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">
<Role name="WebRole1">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
</Role>
<NetworkConfiguration>
<AddressAssignments>
<InstanceAddress roleName="WebRole1">
<PublicIPs>
<PublicIP name="MyPublicIP" domainNameLabel="WebPublicIP" />
</PublicIPs>
</InstanceAddress>
</AddressAssignments>
</NetworkConfiguration>
</ServiceConfiguration>
Подробнее: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-instance-level-public-ip#manage-an-ilpip-for-a-cloud-services-role-instance
После этого вы можете использовать nslookup, чтобы получить публичный IP-адрес, назначенный экземпляру. Если у вас есть несколько экземпляров, вам нужно изменить 0 на 1, 2, 3 и т. Д.
nslookup WebPublicIP.0.<Cloud Service Name>.cloudapp.net
Затем вы можете открыть локальные порты в брандмауэре Windows экземпляра, и вы сможете подключить локальные порты непосредственно из Интернета.
Вы можете создать задачу запуска для открытия локальных портов в брандмауэре облачной службы.
Ниже приведен пример настройки правил брандмауэра. Задача запуска выполняется каждый раз, когда экземпляр перезагружается / перезагружается.
https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-startup-tasks-common#add-firewall-rules
Примерно так:
netsh advfirewall firewall add rule name="TCP ports" protocol=TCP dir=in localport=1000-2000 action=allow