2011-10-05 19 views
4

我有一个有时由WebRole服务引用的类库,有时是由在内部服务器上运行的常规WCF服务引用的。 (这是一个内部的框架类库包含实用功能)Windows AZURE:类库:如何知道在Web角色中还是在常规Web服务中运行

该类内部有一种方法来检测它是否当前在Windows AZURE环境中运行或在IIS中运行?

+1

为什么类图书馆需要知道?应该写成独立于上下文。 –

+0

当它在本地运行(IIS)时,我需要检查磁盘上的许可证文件。当它在云中运行时,我想跳过这一步。 – alexbf

+0

然后这应该是一个配置问题。该代码应该_told_是否使用许可证检查。它不应该自行解决这个问题。 –

回答

1

这出现了一些规律性,但老实说,我会保持简单的事情,并根据配置做出这样的决定。可以通过在运行时读取的显式配置设置,也可以依赖于应用程序配置中定义的容器配置的依赖注入。

在一天结束时,应用程序几乎肯定会重新打包以发布到Azure,因此特定于配置的配置不是什么大问题。

2

我们使用一个静态类,一对夫妇使用RoleEnvironmentMicrosoft.WindowsAzure.ServiceRuntime特性:

public static bool InAzureEnvironment 
    { 
     get 
     { 
      return RoleEnvironment.IsAvailable; 
     } 
    } 

    public static bool InCloud 
    { 
     get 
     { 
      return InAzureEnvironment && !RoleEnvironment.IsEmulated; 
     } 
    } 

它工作得很好。

0

对于需要与云环境无关的代码,使用环境变量可能是个好主意。在Windows Azure中运行的服务,你会加入类似:

<Runtime> 
    <Environment> 
    <Variable name="INCLOUD" value="true" /> 
</Environment> 
... 

此环境变量现在将只显示在Windows Azure上运行(假设你没有设置这个地方,不用时当然云)。您的代码不需要'知道'有关RoleEnvironment或参考ServiceHosting.dll的任何信息。

如果您需要确定您是在模拟中运行还是使用任何RoleEnvironment设置,那么也可以在这里使用新的基于Xpath变量的变量。查询http://msdn.microsoft.com/en-us/library/windowsazure/hh404006.aspx了解更多信息。

相关问题