2014-11-06 40 views
1

我正在将部署从Azure网站的Web应用程序移至Cloud Service中的Web角色。我的代码是在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"; 
     } 
    } 
} 
+0

最简单的事情就是在web.config中添加一个标志吗? – James 2014-11-06 11:22:42

+0

@詹姆斯:是的,那可行。 – spender 2014-11-06 11:24:24

+0

或者你可以检查一个特定的环境变量,例如'WEBSITE_SITE_NAME' - 唯一的问题就是确保你的本地环境中设置了相同的变量。 – James 2014-11-06 11:25:50

回答

2

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

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

相关问题