6

我正在考虑将现有应用程序迁移到 Azure。它将在一个 Web 角色中有一个 MVC 应用程序,在另一个 Web 角色中有一些 WCF 服务。活动时,站点将生活在http://www.myapp.com,服务将在http://api.myapp.comMVC 应用程序配置为指向服务http://api.myapp.com

问题是在将应用程序推送到 Azure 上的“阶段”配置时。我的理解是,每次推送到阶段都会导致服务以新的 url 存在(随机的,比如http://4aa5ae2071324585ba5a902f4242a98c.cloudapp.net/)。在这种情况下,我的 MVC 应用程序发现服务 url 的最佳方式是什么?

一种选择是设置一个类似的 dns 条目http://stage.api.myapp.com并更新我的 DNS CNAME 记录,以在我每次推送到暂存时指向新的 Azure 暂存 url,但是......糟糕。

另一种选择是推送到阶段,获取服务的新 url,RDC 到 MVC 角色的每个实例并手动更新配置。还呸。

有没有一种简单的方法可以做到这一点?我知道我可以使用 PowerShell 之类的东西自动执行上述一些步骤,但我真的希望 Azure 框架中包含一些东西可以让这变得简单。看起来这将是一个标准的场景。

4

2 回答 2

6

动态发现暂存 URL 的唯一方法是让实例检查其自己的部署 ID。我在这里假设 MVC 网站和 WCF 服务在同一个部署中。如果您检查 RoleEnvironment.DeploymentID,您会发现这完全对应于 staging 中使用的“随机”URL(即 http://[deploymentID].cloudapp.net)。

只要您在客户端动态创建 ChannelFactory,它就应该能够获取自己的 DeploymentID 并找到暂存 URL。

当然,这仅在部署在 staging 中时才有用。你为什么不简单地使用生产槽?该名称是稳定的,您可以依赖它或您为其设置的 CNAME(更有可能)。您始终可以拥有多个托管服务(开发、QA、产品等),并且只需在它们上使用生产槽。

于 2011-07-16T20:44:47.870 回答
4

不要做@dunnry 的建议!Azure 有一个非常好的端点概念,可以解决您的问题。您可以从 RoleEnvironment 类访问此信息。

您可以查看我的博客文章,了解如何从客户端获取端点。关键部分是创建 WCF 服务正在侦听的内部终结点。但请记住,您不一定需要为此设置新角色,而且就个人而言,我宁愿将它与原始 Web 角色一起托管在 IIS 中,并拥有其中两个角色以提高可靠性。

这样,部署是什么并不重要,因为服务通信将在该部署内部进行,无论是登台还是生产。

于 2011-07-17T11:06:42.100 回答