【发布时间】: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