C#回收IIS 6的应用程序池错误
我想在使用asp.net c#的Web应用程序中回收IIS 6的应用程序池。C#回收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(字符串机器,字符串appPoolName):74 WE_T.Page_Load(Object sender,EventArgs e)in 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(Object sender,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
我通过将AppPool设置为“本地系统”来工作。但是这可能会导致一些安全问题。有没有更好的解决方案?
最好的解决方案是永远不要以这种方式回收应用程序池。为什么你需要从ASP.NET应用程序那样做?如果其他应用程序部署到同一个池中,该怎么办?您的回收请求可以将它们全部分解。 – 2009-09-20 12:36:32
@ Mike108:看到这个更好更简单的解决方案:http://daron.yondem.com/PermaLink.aspx?guid=d82b6b05-8c59-4136-becd-329156083b75 – 2009-12-14 16:49:29
您的初始文章在机器名称中的“localhost”之后有一个空格。如果你删除这个,会发生什么?
此外,您需要确保运行此代码的ASP.NET用户进程具有重新启动其他应用程序池的适当权限。您可以使用模拟来执行此操作(错误),也可以按照异常中的指示来允许用户处理对其他应用程序的适当权限。池。
异常抛出,因为谁运行应用程序的用户如果要做到这一点,你需要给管理员PRIVILEG用户或创建一个分开的应用程序没有管理员权限
Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)
这监控您的应用程序的状态并在需要时回收。
什么是完整的异常追踪? – 2009-09-20 05:33:05
“RPC服务器不可用”看起来像......无法找到IIS主机。 – 2009-09-20 06:01:26