C # Recycle ошибка IIS 6 в пуле приложений - PullRequest
0 голосов
/ 20 сентября 2009

Я хочу перезапустить пул приложений IIS 6 в веб-приложении, используя asp.net c #.

protected void Page_Load(object sender, EventArgs e)
{
    //Recycle IIS 6's App Pool
    Recycle("localhost", "appPool_02");

}

void Recycle(string machine, string appPoolName)
{
    string path = "IIS://" + machine + "/W3SVC/AppPools/" + appPoolName;
    DirectoryEntry w3svc = new DirectoryEntry(path);
    w3svc.Invoke("Recycle", null);
}

"appPool_02" - это другое имя пула приложений, и приведенный выше код выполняется в "appPool_01".

Когда я использовал код выше, произошла ошибка:

拒绝 访问。 (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.UnauthorizedAccessException: 拒绝 访问。 (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

ASP.NET не авторизован для доступа к запрошенному ресурсу. Рассмотрите возможность предоставления прав доступа к ресурсу для удостоверения запроса ASP.NET. ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET в IIS 5 или Network Service в IIS 6), который используется, если приложение не олицетворяет собой. Если приложение выполняет олицетворение с помощью идентификатора, это будет анонимный пользователь (обычно IUSR_MACHINENAME) или пользователь с запросом аутентификации.

Чтобы предоставить ASP.NET доступ к файлу, щелкните файл правой кнопкой мыши в проводнике, выберите «Свойства» и перейдите на вкладку «Безопасность». Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу. Выделите учетную запись ASP.NET и установите флажки для нужного доступа.

Ошибка источника:

Line 72:         string path = "IIS://" + machine + "/W3SVC/AppPools/" + appPoolName;
Line 73:         DirectoryEntry w3svc = new DirectoryEntry(path);
Line 74:         w3svc.Invoke("Recycle", null);
Line 75:     }
Line 76: 

Исходный файл: e: \ iProject \ iProgress \ iProgress \ T \ T.aspx.cs Строка: 74

Трассировка стека:

[UnauthorizedAccessException: 拒绝 访问。 (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))]]

[TargetInvocationException: Исключение было сгенерировано целью вызова.] System.DirectoryServices.DirectoryEntry.Invoke (String methodName, Object [] args) +238 WE_T.Recycle (String machine, String appPoolName) в e: \ iProject \ iProgress \ iProgress \ T \ T.aspx.cs: 74 WE_T.Page_Load (Отправитель объекта, EventArgs e) в e: \ iProject \ iProgress \ iProgress \ T \ T.aspx.cs: 38 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Объект o, Объект t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Отправитель объекта, EventArgs e) +35 System.Web.UI.Control.OnLoad (EventArgs e) +99 System.Web.UI.Control.LoadRecursive () +50 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 627

Ответы [ 3 ]

1 голос
/ 20 сентября 2009

Я заработал, настроив AppPool как «Локальная система». Но это может вызвать проблемы с безопасностью. Есть ли лучшее решение?

Текст в речь в ASP.NET - доступ запрещен ... что делать?

1 голос
/ 20 сентября 2009

Ваш начальный пост имел пробел после "localhost" в имени машины. Что произойдет, если вы удалите это?

Кроме того, вам необходимо убедиться, что пользовательский процесс ASP.NET, в котором выполняется этот код, имеет соответствующие права для перезапуска других пулов приложений. Вы можете использовать олицетворение, чтобы сделать это (плохо), или следовать инструкциям в исключении, чтобы позволить пользователю обрабатывать соответствующие права на другое приложение. бассейн.

0 голосов
/ 24 марта 2015

Исключение, потому что пользователь, который запускает приложение, не имеет прав администратора

Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)

Если вы хотите сделать это, вам нужно предоставить администратору привилегию для пользователя или создать отдельное приложение, которое отслеживает состояние вашего приложения и перезагружает при необходимости.

...