16

如何可靠地检测我的 Azure 应用程序是否在开发结构中而不是在“云”中运行?

RoleEnvironment.IsAvailable 对两者都是正确的。我想要的东西只在一种情况下是正确的。

我问这个是因为我希望我的图书馆的用户能够在开发结构中免费使用我的图书馆。因此,手动将单独的标识符或标志放在配置文件中并为开发和部署保留两个配置是不可行的。

4

4 回答 4

20

一种选择是查看RoleEnvironment.DeploymentId- 如果您在开发结构中运行,它应该具有类似“部署(n)”的名称,其中 n 是一些序列号。如果您在生产环境中运行,则部署 ID 应该类似于 Guid。

您可以做的另一件事是查看角色的实例名称。在生产中,它应该以_0(代表实例 0)结束。在开发结构中,它将以.0

编辑 1/8/2013 - 意识到我在 2 年前给出的这个答案已经过时了!现在还有- 在这里RoleEnvironment.IsEmulated查看详细信息。

于 2010-05-28T21:48:43.087 回答
16

Windows Azure 1.5 SDK 引入了RoleEnvironment.IsEmulated静态 bool 属性,用于从代码中确定角色实例是否在 Windows Azure 计算模拟器中运行。此信息也可以传递给启动任务。史蒂夫马克思在这里有一篇很棒的文章。

于 2011-10-04T06:48:40.410 回答
3

例如:

开发结构没有完全模拟 Windows Azure 负载平衡器的行为。例如,如果在 Web 角色实例中运行的代码从 RoleEnvironment.StatusCheck 事件处理程序中调用 SetBusy 方法以指示应将角色实例从负载均衡器的轮换中取出,您仍然可以从您的浏览器,而其状态为 RoleInstanceStatus.Busy。

同样 azure fabric 通常在少数几个固定的 OS Images 之一下运行。所以你也可以调查 System.Environment。对于仅在 azure fabric 中出现的某些模式(即与 Windows Azure OS 匹配的特定 OS 版本或类似的东西)。

于 2010-05-27T11:22:04.973 回答
1

有一种非常简单的技术我已经使用了一段时间 - 并且发现自己经常使用它。诀窍是在您的开发机器上设置一个环境变量,并使用基本的 DOS 批处理文件(或 PowerShell)技术,如果该变量存在,则跳过您不想要的东西。此环境变量不会出现在云中。

我在这里写了一篇博客:Azure 常见问题解答:我可以创建一个仅在真正在云中执行的启动任务吗?

于 2011-07-27T03:19:04.267 回答