在Windows Server 2016上设置AppPool标识@ Azure Cloud Service抛出COMException“无法在缓存中找到目录属性。”

时间:2017-07-12 12:52:20

标签: iis azure-web-roles azure-cloud-services

以下代码在Azure Guest OS系列5(运行Windows Server 2016的Cloud Service Webrole)上执行时失败:

using (var serverManager = new ServerManager())
{
    ApplicationPool applicationPool = serverManager.ApplicationPools.Add(name);
    applicationPool.AutoStart = true;
    applicationPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
    applicationPool.ManagedRuntimeVersion = "v4.0";

    // START ISSUE:
    applicationPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
    applicationPool.ProcessModel.UserName = username;
    applicationPool.ProcessModel.Password = userPassword;
    applicationPool.ProcessModel["idleTimeoutAction"] = 1;
    // END ISSUE

    serverManager.CommitChanges();
}

例外:

  

System.Runtime.InteropServices.COMException:目录属性   无法在缓存中找到。

更多信息

在CommitChanges中抛出异常,但只有当我们有代码设置AppPool标识(START ISSUE和END ISSUE之间的4行)时才会抛出异常。因此,在设置AppPool标识时会发生此问题。

此代码已投入生产多年,在本地Windows服务器和Azure Guest OS系列4上运行良好。我们使用提升的权限运行代码(使用<Runtime executionContext="elevated"/>)并使用管理命令行运行代码特权。相同的例外,但仅限于WinSrv2016 Azure云。

解决方法:

如果我们将部署中的计算机密钥重新生成为described here,我们就会停止遇到此问题。

问题:

这是正在解决的OS Family 5 Azure云服务部署的已知问题吗?有什么不那么突兀的建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我也在我这边测试过。当我手动设置App Pool Identity(远程桌面到Web角色并使用IIS管理器重置身份)时,我可以重现Keyset不存在的问题。

enter image description here

如您发布的文章所述,问题是由机器密钥损坏引起的。我建议您在云服务反馈页面上记录此问题。

https://feedback.azure.com/forums/169386-cloud-services-web-and-worker-role