【问题标题】:Is my code running in a web role or a web site?我的代码是在网络角色还是网站中运行?
【发布时间】:2015-01-02 20:57:44
【问题描述】:

我正在将 Web 应用程序的部署从 Azure 网站转移到云服务中的 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";
        }
    }
}

【问题讨论】:

  • web.config 中添加一个标志不是最简单的吗?
  • @James:是的,那行得通。
  • 或者,您可以检查特定的环境变量,例如WEBSITE_SITE_NAME - 唯一的问题是确保在本地环境中设置相同的变量。
  • ...但是,这些替代方法存在额外的维护风险,尤其是对于以后进行新部署的任何人。
  • 检查 RoleEnvironment.IsAvailable 只有当代码作为云服务运行时才会为真。

标签: c# azure azure-storage azure-web-roles azure-web-app-service


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多