Ошибка при изменении удостоверения для пула приложений - PullRequest
4 голосов
/ 07 сентября 2011

Я пытаюсь изменить удостоверение для пула приложений в Windows Azure. Мой проект использует этот пул приложений, когда работает в Windows Azure. По умолчанию пул приложений использует идентификатор NetworkService, но я должен использовать другой идентификатор. Я пытаюсь изменить его в OnStart() событии WebRole следующим образом:

using (ServerManager serverManager = new ServerManager())
{                       
    string appPoolName =
    serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"]
    .Applications.First().ApplicationPoolName;

    var appPool = serverManager.ApplicationPools[appPoolName];

    appPool.ProcessModel.UserName = Environment.MachineName + "\\UserName";

    appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;

    appPool.ProcessModel.Password = "UserPassword";

    serverManager.CommitChanges();
}

Но я получаю исключение со следующим сообщением:

    System.Runtime.InteropServices.COMException (0x80090016): 
       Keyset does not exist (Exception from HRESULT: 0x80090016)
   at Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.CommitChanges()
   at Microsoft.Web.Administration.Configuration.CommitChanges()
   at Microsoft.Web.Administration.ConfigurationManager.CommitChanges()
   at Microsoft.Web.Administration.ServerManager.CommitChanges()
   at Project.Web.WebRole.OnStart() in E:\Projects\...\Web\WebRole.cs:line 57

Если я меняю личность в диспетчере IIS, я не получаю никакой ошибки. Что не так с моим кодом и почему я получаю эту ошибку?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

хорошо, вот мой ответ. Эта ошибка возникает из-за того, что удостоверение NetworkService не имеет доступа на чтение для ключа iisWasKey. Дополнительные сведения и способы решения этой проблемы я обнаружил здесь: Сообщение об ошибке «Набор ключей не существует» при попытке изменить идентификатор пула приложений

2 голосов
/ 07 сентября 2011

Обновления applicationHost.config требуют административных привилегий.Когда вы работаете локально, вы являетесь администратором.В облаке ваша RoleEntryPoint работает как обычный пользователь, если вы не повысите роль.Вы сделали это?

Проверьте, есть ли у вас <Runtime executionContext="elevated"/>, указанное в объявлении роли в ServiceDefinition.csdef.

Редактировать : Уэйд также показал, как это сделатьэто используя немного другой метод (проверьте комментарии). Попробуйте тоже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...