Azure Cloud Emulator重新映射端口

时间:2013-05-31 03:03:11

标签: visual-studio azure azure-web-roles

我有一个包含网站和Windows Azure云服务项目的解决方案。这是ServiceDefinition.csdef:

...
<WebRole name="FrontEndWeb" vmsize="Small">
<Sites>
    <Site name="Web">
        <Bindings>
            <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
    </Site>
</Sites>
<Endpoints>
    <InputEndpoint name="Endpoint1" protocol="http" port="2996" />
</Endpoints>
...
</WebRole>
...

我将web-debug设置设置为:Visual Studio Development Server&amp;自动分配端口

当我运行Windows Azure云服务项目时,我在常规输出日志中收到以下消息:Windows Azure Tools: Warning: Remapping private port 2996 to 2997 in role 'FrontEndWeb' to avoid conflict during emulation.

由于主机验证要求,网站必须在端口2996上运行。

我尝试过的事情:

  • 为Visual Studio Development Server
  • 手动指定Web的端口
  • 将IIS Express与我正在瞄准的确切端口一起使用

我没有的东西:

  • 我的计算机上安装了IIS

为什么Azure Cloud Emulator会重新映射端口,我该怎么做才能阻止它这样做?

6 个答案:

答案 0 :(得分:3)

有可能某些其他应用程序已在2996上运行。尝试从dos提示符运行nestat命令,看看哪些应用程序在哪个端口上运行?

答案 1 :(得分:3)

没有“挖掘旧坟墓”的意图,但如果是为了别人的利益。我发现自己处于同样的境地,并设法绕过它而没有“感觉粗暴”。

我注意到当MSBuild将转换应用于ServiceDefinition.csdef文件时,此文件实际上并不是从解决方案文件夹复制到输出文件夹。相反,它正在被解析和重新发射。然而,这种转变并非没有微妙的副作用。注意这个区别:

<!-- the .csdef file in the solution -->
<InputEndpoint name="Endpoint1" protocol="http" port="8080" />

<!-- the .csdef file after MSBuild -->
<InputEndpoint name="Endpoint1" protocol="http" port="8080" localport="8080" />

注意额外的localport属性。如您所知,Web角色具有内部和公共端点(一个在前端,一个在负载均衡器之后),并且这些端口似乎由这些属性管理。默认情况下,在创建新项目时仅生成port属性 - 因此会产生混淆。

将软件包部署到模拟器时,CSPack需要避免为这两个端点使用相同的端口,从而重新路由内部端点。

简单的解决方法是在localport文件中手动添加.csdef属性,并指定与公共(或任何其他)不同的端口值。

答案 2 :(得分:2)

有同样的问题。但我没有安装IIS,没有Web Matrix,也没有任何东西在监听端口80之前。 因此,当我开始调试时,我看到“从端口80重新映射到81”。然而,模拟器启动我的webrole监听端口80.这不会有问题,但在我的代码中我有以下代码来构建链接:

        int port = HttpContext.Current.Request.Url.Port;

        if (port != 80 && port != 443)
        {
            uri.Append(":");
            uri.Append(port.ToString());
        }

因此,当我开始调试并在浏览器中输入http:// localhost打开我的网站时,奇怪的是我的所有链接都指向http://localhost:81。 同样,webrole端点位于端口80上。 调试开始后,我看到DevFC侦听端口80,但系统进程(映像路径指向ntoskrnl)侦听端口81。 发生了什么事?

答案 3 :(得分:1)

Azure Compute Emulator模拟整个Azure结构,包括负载均衡器和多个实例。因此,将特定IP强制到仿真器上是一项棘手的工作,因为仿真器将重新映射VIP(虚拟IP地址)以模拟Azure平台。

本文http://blogs.staykov.net/2013/05/windows-azure-basicscompute-emulator.html详细说明了模拟器环境。

听起来你需要那个端口来满足外部要求;您是否考虑过在模拟器外部以调试模式运行应用程序?您可以在标准IIS Express实例中启动它,并使用IIS Express .config文件控制端点,然后正常部署到Azure进行生产。

答案 4 :(得分:0)

在我的情况下,我的Web应用程序的属性SSL Enabled设置为&#34; True&#34;我在Https的Web角色云设置中没有端点。

打开Web角色设置,在左侧菜单中单击名为Endpoints的第三个菜单,然后为Https添加端点。现在单击Configuration选项卡,您将看到一个&#34; Startup action&#34;部分。取消选中HTTP端点并检查HTTPS端点。

答案 5 :(得分:0)

我在这个问题上挣扎了一段时间,令人讨厌的是,解决方案是重新启动我的计算机。