我有一个有时由WebRole服务引用的类库,有时是由在内部服务器上运行的常规WCF服务引用的。 (这是一个内部的框架类库包含实用功能)Windows AZURE:类库:如何知道在Web角色中还是在常规Web服务中运行
该类内部有一种方法来检测它是否当前在Windows AZURE环境中运行或在IIS中运行?
我有一个有时由WebRole服务引用的类库,有时是由在内部服务器上运行的常规WCF服务引用的。 (这是一个内部的框架类库包含实用功能)Windows AZURE:类库:如何知道在Web角色中还是在常规Web服务中运行
该类内部有一种方法来检测它是否当前在Windows AZURE环境中运行或在IIS中运行?
这出现了一些规律性,但老实说,我会保持简单的事情,并根据配置做出这样的决定。可以通过在运行时读取的显式配置设置,也可以依赖于应用程序配置中定义的容器配置的依赖注入。
在一天结束时,应用程序几乎肯定会重新打包以发布到Azure,因此特定于配置的配置不是什么大问题。
我们使用一个静态类,一对夫妇使用RoleEnvironment
从Microsoft.WindowsAzure.ServiceRuntime
特性:
public static bool InAzureEnvironment
{
get
{
return RoleEnvironment.IsAvailable;
}
}
public static bool InCloud
{
get
{
return InAzureEnvironment && !RoleEnvironment.IsEmulated;
}
}
它工作得很好。
对于需要与云环境无关的代码,使用环境变量可能是个好主意。在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了解更多信息。
为什么类图书馆需要知道?应该写成独立于上下文。 –
当它在本地运行(IIS)时,我需要检查磁盘上的许可证文件。当它在云中运行时,我想跳过这一步。 – alexbf
然后这应该是一个配置问题。该代码应该_told_是否使用许可证检查。它不应该自行解决这个问题。 –