Iis 无法提交Azure Web角色中的Web管理更改

Iis 无法提交Azure Web角色中的Web管理更改,iis,azure,Iis,Azure,我在新的1.3 SDK中运行了一个Azure Web角色,并且在尝试使用Microsoft.Web.Administration.ServerManager更改IIS时遇到权限问题。每当我执行CommitChanges()时,它都会抛出以下错误: UnauthorizedAccessException“由于权限不足,无法写入配置文件” 我的服务器管理器代码正在RoleEntryPoint的OnStart方法中执行 我的理解是,在1.3中全面支持IIS的目的是为了更好地控制应用程序的配置,包括在需

我在新的1.3 SDK中运行了一个Azure Web角色,并且在尝试使用
Microsoft.Web.Administration.ServerManager
更改IIS时遇到权限问题。每当我执行
CommitChanges()
时,它都会抛出以下错误:

UnauthorizedAccessException“由于权限不足,无法写入配置文件”

我的服务器管理器代码正在
RoleEntryPoint
OnStart
方法中执行


我的理解是,在1.3中全面支持IIS的目的是为了更好地控制应用程序的配置,包括在需要时动态创建新的IIS站点。

我认为这里有两个问题。首先是在Azure中使用IIS。是的,使用1.3 SDK意味着我们现在可以访问比以前更多的功能。这意味着我们可以在配置中为我们的站点设置多个站点和虚拟目录,如中所示


第二个问题是,当您试图以编程方式进行更改时,会遇到特权问题。我将假设您没有尝试通过上面的配置来完成一件简单的事情。代码出错的最可能原因是web角色没有以管理员权限运行。幸运的是,在1.3SDK中,我们还可以使用提升的权限运行代码。如中的其他地方所示,您可以创建一个单独的.exe,指定在启动时以配置中的提升权限运行。

确保您的角色以提升权限运行。

为@smarx answer的引用提供了一个清晰的示例

以下是使用管理员级别权限运行
RoleEntryPoint.OnStart
WebRole.OnStart
)的配置



您可以运行提升的启动任务,但也可以运行提升的角色(RoleEntryPoint中的代码,如OnStart)。对于编写IIS更改脚本,我认为启动任务太早(应用程序池尚未设置),因此最好运行提升的角色并在OnStart中进行更改。请注意,运行提升的角色不会提升实际的web应用(在IIS下),只会提升RoleEntryPoint代码。我不知道这是一个选项,所以我花了一些时间尝试研究如何做到这一点。尽管我尽了最大的努力,我还是无法找到如何使用提升的权限运行角色。我肯定错过了一个明显的步骤,你能告诉我正确的方向吗?你如何使用提升的权限运行角色?我认为我们有启动任务的原因之一是这不可能?只需输入ServiceDefinition.csdef当我将“”添加到web角色定义并尝试部署时,它无法启动。我已经仔细检查了我做的是否正确。有什么想法吗?