我的代码是在Web角色还是网站上运行?

时间:2014-11-06 11:11:23

标签: c# azure azure-storage azure-web-roles azure-web-sites

我将Web应用程序的部署从Azure网站迁移到Cloud Service中的Web角色。

迁移的一部分涉及在角色配置中保留一些本地存储并更改与本地文件系统的交互,以使用以下口头禅来查找适合写入的路径:

LocalResource tempStorageResource = RoleEnvironment
                                       .GetLocalResource("SomeRoleStorage");
var targetFolderPath = tempStorageResource.RootPath;

但是,我想在WebSite实例中保持工作。我要编写一个路径提供程序来抽象实际位置。执行此操作的一部分将需要检测我是否在本地/在调试器中运行,但我还需要知道正在运行的代码是在WebSite还是WebRole下运行。我怎么能这样做?

public class AzurePathProvider : ILocalStoragePathProvider
{
    public string GetStoragePath(string key)
    {
        var isWebRole = //????;
        if(isWebRole)
        {
            LocalResource tempStorageResource = 
                RoleEnvironment
                    .GetLocalResource(key);
            return tempStorageResource.RootPath;
        }
        else
        {
            return "/some/other/storage/location";
        }
    }
}

1 个答案:

答案 0 :(得分:2)

检查RoleEnvironment.IsAvailable以确定代码是否在Cloud Service中运行。当您的代码在Cloud Service中运行时,它始终为true,否则将为false

此外,为了检测代码是否在计算机模拟器中运行,您可以检查RoleEnvironment.IsEmulated以及RoleEnvironment.IsAvailable