【问题标题】:WindowsAzure: Is it possible to set directory permissions within the web.config?WindowsAzure:是否可以在 web.config 中设置目录权限?
【发布时间】:2011-07-03 15:12:01
【问题描述】:

我的一个PHP脚本要写入日志文件夹,结果错误是:

无法打开日志文件“E:\approot\framework\log/dev.log”进行写入。

当我手动设置 WebRole 用户 RD001... 的写入权限时,它工作正常。 现在我想自动设置文件夹权限。有没有简单的方法来完成它? 请注意,我对 IIS 和周围的东西非常陌生,我将不胜感激准确的答案,谢谢。

【问题讨论】:

  • 你在E:\approot\framework\log/dev.log有一个斜线错误,你没有办法配置它写到别的地方吗?
  • 我可以改变路径,但我不知道角色用户有写权限的地方。

标签: windows iis permissions azure logging


【解决方案1】:

简短/技术回复

您可能可以使用完全信任和启动任务对特定文件夹设置权限。但是,您需要在此脚本中考虑无状态操作系统和更改驱动器号(可能,不太可能),这将使其变得困难。此外,本地存储不会持久化,因此您无法确保这些数据在重新启动时保留。

建议:不要写local,往下看……

编辑:考虑一下,虽然我仍然建议不要这样做,但还有第三种选择:您可以在服务配置中分配本地存储,然后使用 dll 引用从 PHP 访问它,然后您将可以访问到那个文件夹。请记住,本地存储不会持久化,因此在重新启动时会消失。

本地服务配置: http://blogs.mscommunity.net/blogs/dadamec/archive/2008/12/11/azure-reading-and-writing-with-localstorage.aspx

从 php 访问配置: http://phpazure.codeplex.com/discussions/64334?ProjectName=phpazure


长/详细的响应:

在 Azure 中,确实鼓励您将事物视为一个平台,而不是“服务器上的软件”。我的意思是,诸如“将内容写入本地日志文件”之类的想法与云“想法”有些不兼容。根据您的使用情况,您可以(并且应该)转换此脚本以将此数据输出到某些基于云的或外部存储,而不是仅将其放在磁盘上。

我建议修改此脚本以利用 PHP Azure SDK 并将这些日志条目写入 Azure 中的表或 blob 存储。如果这听起来不错,请提供 PHP,我可以给出一个确切的例子。

这样做的主要原因(除了推动云的想法)是在 Azure 中,您不能假设主机(“角色实例”)将保持操作系统状态,因此虽然您可以设置一些东西,例如文件夹权限,你不能指望他们坚持下去。当结构必须更新您的角色并对某些较低级别的问题做出反应时,您无法保证这些权限不会被重置。例如,当前实例所在的机架上的硬盘驱动器笼可能会发生故障。如果故障足够严重,Fabric 控制器将需要重建您的实例。发生这种情况时,您的代码将被移至完全不同的服务器,因此需要重新设置这些权限。此外,根据更改,E:\ 可能突然需要成为 F:\ 或 X:\ 驱动器,而您不会知道。

最好(在某种程度上)假装您的应用程序正在“在 Azure 中”而不是“在 azure 的服务器上”运行,因此您无需对托管环境做出任何假设。因此,您在代码之外需要的任何东西(数据、日志、审计等)都应该存储在您可以控制的地方(Azure 存储、外部调用等)

【讨论】:

  • 非常感谢您的详细解答。我知道本地存储的缺点,但就我而言,没有其他方法,非持久性也没有问题。我的问题的主要原因是存储缓存数据。首先,我实际上使用了 blob 存储,但它对于 Web 应用程序来说太慢了。 Azure 现在提供 memcache 支持,也许我可以将其用于我的要求。我仍然想知道为什么 Azure 分配了这么多本地存储(每个实例最多 2TB,在单独的驱动器上),尽管没有合理的使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多