2

我有一个包含网站和 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 调试设置设置为:Visual Studio 开发服务器和自动分配端口

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

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

我尝试过的事情:

  • 为 Visual Studio 开发服务器手动指定 Web 端口
  • 将 IIS Express 与我想要的确切端口一起使用

我没有的东西:

  • IIS 安装在我的计算机上

为什么 Azure Cloud Emulator 重新映射端口,我可以做些什么来防止它这样做?

4

6 回答 6

3

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

于 2013-05-31T06:13:08.403 回答
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并指定与公共(或任何其他)不同的端口值。

于 2014-06-19T14:04:01.820 回答
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。发生了什么?

于 2013-06-25T16:00:38.853 回答
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 进行生产。

于 2013-06-18T03:33:22.973 回答
0

在我的情况下,我的 Web 应用程序的 SSL Enabled 属性设置为“True”,并且我的 Web Role Cloud 设置中没有用于 Https 的端点。

打开您的 Web 角色设置,然后在左侧菜单中单击名为 Endpoints 的第三个菜单并为 Https 添加一个端点。现在单击配置选项卡,您将看到“启动操作”部分。取消选中 HTTP 端点并选中 HTTPS 端点。

于 2015-09-16T08:24:18.347 回答
0

我在这个问题上挣扎了一段时间,烦人的解决方案是重新启动我的电脑。

于 2021-08-08T15:12:26.693 回答