gpt4 book ai didi

debugging - 当我在 VS2012 中调试时,如何让 Azure 模拟器启动特定的主机 header 定义的站点?

转载 作者:行者123 更新时间:2023-12-02 23:03:36 25 4
gpt4 key购买 nike

我有一个 Azure 部署,其中在单个 Web 角色上配置了两个站点,如下所示:

<WebRole name="Studio" vmsize="Small">
<Sites>
<Site name="Studio" physicalDirectory="..\Studio">
<Bindings>
<Binding name="HttpIn" endpointName="HttpIn" hostHeader="studio.mydomain.localhost" />
</Bindings>
</Site>
<Site name="Admin" physicalDirectory="..\Admin">
<Bindings>
<Binding name="HttpIn" endpointName="HttpIn" hostHeader="admin.mydomain.localhost" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</Endpoints>
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
</WebRole>

我的主机文件中也映射了地址:

127.0.0.1   studio.mydomain.localhost
127.0.0.1 admin.mydomain.localhost

这工作正常,如果我在浏览器中测试,使用 http://studio.mydomain.localhost:81/http://admin.mydomain.localhost:81/,然后我得到两个不同的索引页,正如预期的那样。

但是,如果我在 Visual Studio 中按 F5,它会坚持尝试启动 http://127.0.0.1:81/,这当然会导致 404 Bad Request 错误。

有什么方法可以让 VS 立即从 F5 启动正确的地址吗?这只是一件小事,但每次都必须重新输入地址,非常耗时。

而且,当我们讨论这个主题时,当我按 F5 时,Azure 如何选择要启动的角色?我在同一个 Azure 项目中拥有 Web 服务角色。为什么它不尝试启动它?它们是我缺少的一些设置还是这一切都由 ServiceDefinition.csdef 中出现的顺序控制?

我已经阅读了以下文章(以及其他文章)。虽然两者都提供了丰富的信息,但我在其中都看不到答案:

http://blog.elastacloud.com/2011/01/11/azure-running-multiple-web-sites-in-a-single-webrole/

http://msdn.microsoft.com/en-us/library/windowsazure/gg433110.aspx

最佳答案

实际上有一个解决方法可以启动所有站点(不过您需要单击一个按钮)。首先,您需要知道如何:

  • 获取每个站点的主机 header (ServiceDefinition)
  • 获取当前端口(RoleEnvironment)
  • 获取没有主机头的网站的当前 IP(角色环境)

这是一个小应用程序,用于获取信息、聚合信息并启动 Internet Explorer(您可以改进代码以跳过 TCP 端点等...):

    static void Main(string[] args)
{
var document = System.Xml.Linq.XDocument.Load(Path.Combine(args[0], "ServiceDefinition.csdef"));
var siteBindings = from binding in document.Descendants()
where binding.Name.LocalName == "Binding"
select new
{
Role = binding.Parent.Parent.Parent.Parent.Attribute("name").Value,
EndpointName = binding.Attribute("endpointName").Value,
HostHeader = binding.Attribute("hostHeader") != null ? binding.Attribute("hostHeader").Value : null
};

var endpoints = RoleEnvironment.Roles.SelectMany(o => o.Value.Instances)
.SelectMany(o => o.InstanceEndpoints);

foreach (var siteBinding in siteBindings)
{
var endpoint = endpoints.FirstOrDefault(o => o.Value.RoleInstance.Role.Name == siteBinding.Role);
Process.Start("iexplore.exe", String.Format("{0}://{1}:{2}", endpoint.Value.Protocol, siteBinding.HostHeader ?? endpoint.Value.IPEndpoint.Address.ToString(), endpoint.Value.IPEndpoint.Port));
}
}

现在,对于 Visual Studio 集成,请转到工具外部工具,并添加一个带有参数 $(ProjectDir) 的新应用程序.

enter image description here

最后,启动调试器后,在解决方案资源管理器中选择 Windows Azure 项目,转到工具,然后单击打开 IExplorer for Azure 按钮。您甚至可以将其添加到工具栏。

enter image description here

关于debugging - 当我在 VS2012 中调试时,如何让 Azure 模拟器启动特定的主机 header 定义的站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12782279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com