在Azure Compute Emulator中外部公开端口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Azure Compute Emulator中外部公开端口相关的知识,希望对你有一定的参考价值。

我在C#中创建了一个Azure Cloud Service TCP侦听器,现在我尝试在本地调试它。下面的服务定义公开了我感兴趣的端口,但是当它在本地运行时,地址被绑定到localhost,这对同一网络上的其他设备是不可见的。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Foo.Listener.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WorkerRole name="Foo.Listener" vmsize="Small">
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
    </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="Foo Protocol" protocol="tcp" port="9100" localPort="9100" />
    </Endpoints>
  </WorkerRole>
</ServiceDefinition>

我尝试使用以下命令添加端口代理:

netsh interface portproxy add v4tov4 listenport=9100 connectaddress=localhost connectport=9100 protocol=tcp

但是,当我这样做时,计算模拟器似乎认为端口号9100正在使用,它选择9101。如何在本地运行我的辅助角色,并允许它接受外部连接?

答案

我设法通过添加工作者角色的检查来实现这一点。它不漂亮,我宁愿通过配置而不是通过代码完成这个,但这是我的解决方案:

IEnumerable<IPEndPoint> endpoints;

if (RoleEnvironment.IsEmulated)
{
    endpoints = Dns.GetHostEntry(Dns.GetHostName())
        .AddressList
        .Select(address => new IPEndPoint(address, 9100));
}
else
{
    endpoints = RoleEnvironment.CurrentRoleInstance
        .InstanceEndpoints
        .Select(endpoint => endpoint.Value.IPEndpoint);
}

以上是关于在Azure Compute Emulator中外部公开端口的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Server Container 中运行 Azure Storage Emulator:运行在容器中

在 Windows Server Container 中运行 Azure Storage Emulator:能否监听自定义地址?

在 Windows Server Container 中运行 Azure Storage Emulator:使用自定义的 SQL Server Instance

使用C#和StorageManagementClient / ComputeManagementClient对VM进行Azure磁盘附件

Azure 资源管理器部署超时

VMExtensionProvisioningError:在azure上创建TeamServicesAgent扩展时