0

我正在使用天蓝色模拟器。我想以我的工作角色监听端口 4702。当我有实例计数 = 1 时,它不会引发异常。但是如果将实例计数设置为 2,那么它会尝试在端口 4702 上打开两次(运行被触发两次)并引发异常:“每个套接字地址(协议/网络地址/端口)通常只允许一次使用”如何正确侦听 azure 工作角色中的传入连接?

InputEndpoint 的类型是“Input” 配置:

  <WorkerRole name="GpsRerouterWorker" vmsize="Small">
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <Endpoints>
      <InputEndpoint name="reroutei4702" protocol="tcp" port="4702" localPort="4702" />
    </Endpoints>
    <LocalResources>
      <LocalStorage name="DiagnosticStore" sizeInMB="20000" cleanOnRoleRecycle="false" />
    </LocalResources>
  </WorkerRole>

编码:

    public class WorkerRole : RoleEntryPoint
    {
        public override void Run()
            {
System.Net.IPEndPoint IPEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["gpsreroutei4702"].IPEndpoint;                TcpListener listener = new TcpListener(IPEndpoint);
                listener.Start();

            Logger.Log("Server is running");

            while (true)
            {
                Logger.Log("Waiting for connections...");
                try
                {
                    var tcpClient = await listener.AcceptTcpClientAsync();
                    await HandleConnectionAsync(tcpClient);
                }
                catch (Exception exp)
                {
                    Logger.Log(exp.ToString());
                }

            }
        }

        public override bool OnStart()
        {
            // Set the maximum number of concurrent connections 
            ServicePointManager.DefaultConnectionLimit = 12;

            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            return base.OnStart();
        }
    }

UPD:更新了代码。现在它可以工作了。

4

1 回答 1

1

我认为您的问题可能与IPAddress.Any线路有关。如果您在模拟器中启动同一角色的多个实例,则每个实例都应该获得自己的 IPAddress。

以下属性应为您提供每个实例的 IP 和端口。

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["reroutei4702"].
IPEndpoint.Address.ToString();

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["reroutei4702"].
IPEndpoint.Port
于 2013-09-24T13:22:02.527 回答