ServerManager, создание пула приложений, идентификация не установлена

Я пытаюсь создать пул приложений, используя ServerManager учебный класс. Это мой код:

using (ServerManager serverManager = new ServerManager())  {
   if (!serverManager.ApplicationPools.Any(p => p.Name == poolName))  {
     ApplicationPool newPool = serverManager.ApplicationPools.Add(poolName);
     newPool.ManagedRuntimeVersion = "v4.0";
     newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
     newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
     newPool.ProcessModel.UserName = user;
     newPool.ProcessModel.Password = pass;
     serverManager.CommitChanges();
   }
}

Пул приложений создается, но для него не задано удостоверение - столбец идентификаторов в таблице пулов приложений в диспетчере IIS пуст. Что я делаю неправильно?

Пользователь находится в форме домен \ имя пользователя, и переданные учетные данные верны (другая часть кода проверяет их).

1 ответ

Взгляните на этот код. У меня работает:

      public static ApplicationPool GetOrCreateApplicationPool(ServerManager serverManager, string applicationPoolName, string userName, SecureString password)
{
    if (!serverManager.ApplicationPools.Any(p => p.Name.Equals(applicationPoolName)))
    {
        ApplicationPool appPool = serverManager.ApplicationPools.CreateElement();
        appPool.Name = applicationPoolName;
        appPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
        appPool.ManagedRuntimeVersion = "v4.0";

        if(password != null)
        {
            if (!(string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(password.ToPlainTextString())))
            {
                appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
                appPool.ProcessModel.UserName = userName;
                appPool.ProcessModel.Password = password.ToPlainTextString();
            }
        }                

        serverManager.ApplicationPools.Add(appPool);
        serverManager.CommitChanges();
    }

    return serverManager.ApplicationPools.First(p => p.Name.Equals(applicationPoolName));
}

Конечно, есть некоторые дополнительные методы, такие как расширения, которые могут привести к невозможности запуска этого фрагмента кода, но идея есть, и в настоящее время он работает в моем приложении.

Другие вопросы по тегам