.csdef文件中的“physicalDirectory”和“Port”

时间:2012-12-14 06:35:28

标签: asp.net azure

我尝试在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.这是导致无法加载页面的主要原因。

Port 8081

如果手动更正浏览器网址并输入:8080文件中的端口.csdef,则会成功打开一个网页。为什么正在加载页面取:8081端口。谢谢。

1 个答案:

答案 0 :(得分:1)

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

首先,Windows Azure计算模拟器。您可以从my blog post here获取Windows Azure部署的基本图片。基本上你有一个load balancer向公众公开,其公共IP地址(VIP)和一些公共端口已经打开。然后你就拥有了角色实例,每个角色实例都有自己的IP地址(DIP)和打开的端口来监听来自Load Balancer的请求。

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

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

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

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

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

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