WindowsAzure:是否可以在web.config中设置目录权限?

时间:2011-02-24 14:47:17

标签: windows iis permissions azure logging

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

  

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

当我手动设置WebRole用户RD001的写入权限时,它可以正常工作。 现在我想自动设置文件夹权限。有没有简单的方法来完成它? 请注意,我对IIS和周围的东西都很陌生,我希望得到精确的答案,谢谢。

1 个答案:

答案 0 :(得分:4)

简短/技术响应

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

推荐:不要写本地,请阅读以下内容......

编辑:考虑到这一点,虽然我仍然建议不要这样做,但有第三个选项:您可以在服务配置中分配本地存储,然后使用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存储,外部呼出等)