Предоставить сетевой службе разрешение на переработку пула приложений iis

#c# #asp.net #iis-6 #windows-server-2003

#c# #asp.net #iis-6 #windows-server-2003

Вопрос:

Я пытаюсь создать веб-приложение .NET, которое перезапускает пул приложений на удаленном веб-сервере под управлением IIS 6.0 на Windows Server 2003. У меня работает код, но у меня проблема с разрешениями.

 string appPoolPath = ConfigurationSettings.AppSettings["ApplicationPool"];

string systemId = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

try
{

    DirectoryEntry svc = new DirectoryEntry(appPoolPath);
    svc.Invoke("Recycle");
    LabelResult.Text = "Application Pool Recycled Succesfully!";
    LabelResult.Visible = true;
}
catch(Exception exc)
{

    LabelResult.Text = "Error ("   systemId   "): "   exc.Message   " : "   exc.InnerException;

    LabelResult.Visible = true;
}
  

Когда я запускаю код, я получаю следующую ошибку:

Ошибка (NT AUTHORITY СЕТЕВАЯ СЛУЖБА): целью вызова было вызвано исключение. : Система.Исключение UnauthorizedAccessException: доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

Итак, мой вопрос в том, как я могу предоставить учетной записи СЕТЕВОЙ СЛУЖБЫ разрешение на вызов recycle без предоставления учетной записи полных прав администратора? Возможно ли это?

Я знаю другой способ решить эту проблему — выдать себя за одного из существующих администраторов на сервере, но мне не разрешено этого делать. Я не могу создавать пользователей на компьютере и не могу получить учетные данные для входа в существующие учетные записи пользователей.

Ответ №1:

Другой вариант:

Поместите фиктивный файл в каталог /bin и обновляйте его каждый раз, когда захотите перезапустить пул

Комментарии:

1. это перезапускает приложение, а не пул приложений

Ответ №2:

Это не совсем так. Вам нужен раздел в Web.Config:

 <section name="TestSection" restartOnExternalChanges="true" requirePermission="false" type="System.Configuration.AppSettingsSection, System.Configuration"/>

<TestSection configSource="Test.config"></TestSection>
  

Затем, когда вы изменяете Test.config, пул приложений перерабатывается.

Ответ №3:

Попробуйте удалить и создать пул приложений. Решил мою проблему.

 var server = new ServerManager();
var pool = server.ApplicationPools.FirstOrDefault(q => q.Name == "MyPool");
if (pool != null)
{
    server.ApplicationPools.Remove(pool);
    server.CommitChanges();

    server.ApplicationPools.Add("MyPool");
    server.CommitChanges();
}