0

我尝试在 azure 窗口中运行我的网站。我在本地进行测试。我的.csdef文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Test.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
  <WebRole name="TestWebApplication" vmsize="Small">
    <Sites>
      <Site name="Web2" physicalDirectory="F:\MyPath\">

        <Bindings>
          <Binding name="Endpoint2" endpointName="Endpoint2" />

        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint2" protocol="http" port="8080"></InputEndpoint>

    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
</ServiceDefinition>

当我按 F5 并运行项目时,它成功运行。但在浏览器中,我看到它占用了 8081 端口。这是无法加载页面的主要原因。

端口 8081

如果手动更正浏览器 url 并键入文件:8080中的端口,.csdef它会成功打开一个页面。为什么加载页面需要:8081端口。谢谢。

4

1 回答 1

1

解释起来有点复杂,要完全理解它,你应该对IIS和站点绑定有比较好的了解,但让我试试。

首先,Windows Azure Compute Emulator。您可以从我的博客文章中了解 Windows Azure 部署的基本情况。基本上你有一个load balancer公开的,它的公共 IP 地址 (VIP) 和一些公共端口打开。然后你就有了角色实例,每个实例都有自己的 IP 地址 (DIP) 和端口,以侦听来自负载均衡器的请求。

Windows Azure Compute 模拟器在本地复制了整个结构。它具有软件模拟负载均衡器,并为您的每个角色实例创建虚拟 IP 地址(单独)。然后它在本地地址 127.0.0.1 和端口上公开“负载平衡器”,该端口未被任何其他进程使用。然后,它在 IIS(或 IIS Express)中为每个实例创建一个单独的网站(假设角色只定义了一个站点)。每个站点都绑定到自己唯一的 IP 地址和该 IP 地址上的自己的端口。然后,模拟负载均衡器将在 127.0.0.1 上接收到的流量轮询到底层角色实例(在我们的例子中 - 不同的站点)。

现在,当您编辑 CSDF 文件中的“站点”部分时,您正在为 IIS 创建自定义站点 + 绑定信息。站点有一个标准和well know名称,它是Web。如果存在名称为Web的站点定义,则它绑定到 IIS 中的通配符域。模拟负载均衡器上来自 127.0.0.1 的所有请求仅重定向到使用名称Web定义的网站。那么,“Web”站点必须是 Web 应用程序,并且必须是与 WebRole 相关联的项目。在您的情况下,您正在定义Web2。这将起作用,但有以下限制:

  • hostHeader定义binding. _
  • 当您在本地调试时,您必须手动将您提供的任何值映射hostHeader127.0.0.1主机文件中(位于%windir%\system32\drivers\etc\hosts- 没有扩展名的文件中,只能由管理员编辑)。
  • 当您按 F5 时,在浏览器在 127.0.0.1 上加载有错误的内容后,您必须手动键入您拥有的自定义值,hostHeader但保持浏览器打开的自定义端口。

只有这样,您的浏览器才能正确加载该站点。

当您输入端口 :8080 时,您的网站可以正常打开这一事实仅显示直接访问该网站,跳过本地负载平衡器模拟器。

如果你想在一个模拟环境中全面测试一个网站项目,你必须经历我描述的过程。如果您不想打扰这些东西,您可以直接启动您的网站并进行调试。但如果这样做,您将无法访问RoleEnvironment变量和配置设置。

于 2012-12-14T08:05:03.900 回答