如何检测Azure开发结构中正在运行的应用程序?

时间:2010-05-26 17:32:33

标签: azure azure-compute-emulator

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

RoleEnvironment.IsAvailable对两者都适用。我想要的只是一个案例中的事情。

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

4 个答案:

答案 0 :(得分:20)

一个选项是查看RoleEnvironment.DeploymentId - 如果你在开发结构中运行,它应该有一个名称,如'deployment(n)',其中n是一些序列号。如果您正在生产中运行,则部署ID应类似于Guid。

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

结尾

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

答案 1 :(得分:16)

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

答案 2 :(得分:3)

例如:

  

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

天蓝色织物通常在one of the few fixed OS Images下运行。所以你也可以调查System.Environment。对于仅在azure结构中出现的某些模式(即与Windows Azure OS匹配的特定操作系统版本或类似的东西)。

答案 3 :(得分:1)

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

我在这里写了博客:Azure FAQ: Can I create a Startup Task that executes only when really in the Cloud?