C#回收IIS 6的应用程序池错误

时间:2009-09-20 05:29:37

标签: c# .net asp.net web-applications

我想使用asp.net c#在Web应用程序中回收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)) 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.UnauthorizedAccessException:拒绝访问。(HRESULT异常:0x80070005(E_ACCESSDENIED))

ASP.NET无权访问所请求的资源。考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本进程标识(通常是IIS 5上的{MACHINE} \ ASPNET或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    e:\ iProject \ iProgress \ iProgress \ T \ T.aspx.cs中的WE_T.Recycle(String machine,String appPoolName):74    e:\ iProject \ iProgress \ iProgress \ T \ T.aspx.cs中的WE_T.Page_Load(Object sender,EventArgs e):38    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+14    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,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

3 个答案:

答案 0 :(得分:1)

您的初始帖子在计算机名称中的“localhost”后面有一个空格。如果删除它会发生什么?

此外,您还需要确保运行此代码的ASP.NET用户进程具有重新启动其他应用程序池的相应权限。您可以使用模拟执行此操作(错误)或按照例外中的说明操作,以允许用户处理对其他应用程序的适当权限。池。

答案 1 :(得分:1)

我通过将AppPool设置为“本地系统”来实现它。但这可能会导致一些安全问题。有没有更好的解决方案?

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

答案 2 :(得分:0)

异常抛出,因为运行该应用程序的用户没有管理员权限

Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)

如果您想这样做,您需要为用户授予管理员权限,或创建一个独立的应用程序,用于监控应用程序的状态并在需要时进行回收。

相关问题