在 Azure 计算模拟器中向外部公开端口
Exposing a port externally in Azure Compute Emulator
我用 C# 做了一个 Azure 云服务 TCP 侦听器,现在我想在本地调试它。下面的服务定义暴露了我感兴趣的端口,但是在本地运行ning时,地址绑定到localhost
,对同一网络的其他设备不可见[=15] =]
<?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);
}
我用 C# 做了一个 Azure 云服务 TCP 侦听器,现在我想在本地调试它。下面的服务定义暴露了我感兴趣的端口,但是在本地运行ning时,地址绑定到localhost
,对同一网络的其他设备不可见[=15] =]
<?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);
}