我在新的1.3 SDK中运行了Azure Web角色,尝试使用Microsoft.Web.Administration.ServerManager
对IIS进行更改时遇到权限问题。每当我执行CommitChanges()
时,它都会抛出此错误:
UnauthorizedAccessException“由于权限不足,无法写入配置文件”。
我的ServerManager代码正在OnStart
的{{1}}方法中执行。
我的理解是,在1.3中转移到完整IIS支持的目的是为了让我们可以更好地控制应用程序的配置,包括在需要时动态创建新的IIS站点。
答案 0 :(得分:8)
确保您的角色以提升的权限运行。
答案 1 :(得分:1)
我认为这里有两个问题。首先在Azure中使用IIS。是的,使用1.3 SDK意味着我们现在可以访问比以前更多的功能。这意味着我们可以在配置中为我们的站点设置多个站点和虚拟目录,如training kit所示。
其次,在尝试以编程方式进行更改时,您会遇到特权问题。我假设你不是想做一件你可以通过上面的配置做的事情。您的代码出错的最可能原因是因为Web角色不是以管理员权限运行的。幸运的是,在1.3 SDK中,我们还可以使用提升的权限运行代码。如training kit中的其他地方所示,您可以创建一个单独的.exe,您指定在启动时使用配置中的提升权限运行。
答案 2 :(得分:0)
提供一个明确的例子来参考@smarx答案。
以下是使用管理员级权限运行RoleEntryPoint.OnStart
( WebRole.Onstart
)的配置。
<ServiceDefinition name="MyProject.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="MyProject.WebRole" vmsize="Small">
<Runtime executionContext="elevated"/> <!-- Required for certain WebRoleOnStart tasks (avoid insufficient permission errors) -->
<Sites>
<!-- ... -->
</Sites>
</WebRole>
</ServiceDefinition>