2009-09-20 3 views
0

Я хочу, чтобы добавить в приложение приложение IIS 6 в приложение, используя asp.net C#.C# Recycle Ошибка пула приложений IIS 6

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.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, Object o, Object 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 (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

+2

Что такое полная трасса исключения? –

+0

«RPC-сервер недоступен» выглядит так: ... хост IIS не найден. –

ответ

1

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

Text to Speech in ASP.NET - Access is denied... what to do?

+0

Лучшее решение - никогда не перерабатывать пул приложений таким образом. Зачем вам нужно это делать из приложения ASP.NET? Что делать, если другие приложения развернуты в один пул? Ваш запрос на переработку может сломать их все. –

+1

@ Mike108: см. Это для лучшего и простого решения: http://daron.yondem.com/PermaLink.aspx?guid=d82b6b05-8c59-4136-becd-329156083b75 –

1

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

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

+0

О, да. Я удаляю пробел после «localhost», а затем ошибка изменяется на «Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)» – Mike108

+0

Ошибка «Ошибка сервера RPC» не является реальной ошибкой, просто потому, что есть пробел после " localhost "в моем первоначальном сообщении. После того, как я удалю пробел, реальная ошибка: Exception from HRESULT: 0x80070005 (E_ACCESSDENIED). – Mike108

0

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

Exception from HRESULT: 0x80070005 (E_ACCESSDENIED) 

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

Смежные вопросы