我有一个包含网站和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上运行。
我尝试过的事情:
我没有的东西:
为什么Azure Cloud Emulator会重新映射端口,我该怎么做才能阻止它这样做?
答案 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)
我在这个问题上挣扎了一段时间,令人讨厌的是,解决方案是重新启动我的计算机。