关于 c#:Azure Compute Emulator 中的内部端口冲突

Internal Port Colliding in Azure Compute Emulator

我有一个内部端点设置如下:

1
<InternalEndpoint name="TcpSvcEndpoint" protocol="tcp" port="20000" />

端点将由 NetTcp WCF 服务使用。如果我在计算模拟器中运行 1 个实例,则配置工作正常。但是在计算模拟器中有 2 个或更多实例(Visual Studio 调试 Azure 项目),相同的端口被分配给所有实例。这当然会使所有服务(第一个实例除外)的 WCF NetTcp 初始化失败,并出现预期异常"IP端点上已经有一个侦听器。确保..... SocketException:每个套接字只有一次使用...... ..".

我的理解是模拟器会为每个实例增加端口。如果不是这样,在 Visual Studio 中调试时如何在计算模拟器上测试多个实例?

我不想使用带有 "*" 的动态端口设置。

为了澄清,我正在访问 RoleEnvironment 以获取分配的端口。

1
RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["TcpSvcEndpoint"].IPEndpoint.Port;

我正在使用 Azure SDK 1.6。 (2011 年 11 月版)。


对于 Windows Azure SDK 1.5 及更高版本,多个实例具有不同的 IP 地址,但具有相同的端口,如我的这篇博客所述。

它们的工作方式是,如果您定义了一个带有 2 个实例的端口 10000 的 TCP 端点,那么您将获得如下实例 IP 地址:

  • 实例 #1 - 127.255.0.1:10000
  • 实例 #2 - 127.255.0.2:10000

因此,如果您必须在计算模拟器中测试服务的所有实例。您需要将 IPAddress 和 Port 组合起来以测试应用程序。