鉴于以下方法,我正在尝试启动/停止 IIS 7 应用程序池。我可以在本地系统上成功完成此操作,但是当我将其放在我们的 Windows 2008 服务器上时,仅在尝试停止服务时才会出现错误 - 启动工作正常:
[NoCache]
public ActionResult EnableAppPool(Models.ActionRequest actionRequest)
{
try
{
if (ModelState.IsValid && actionRequest.ActionRequestPassword == ConfigurationManager.AppSettings["NewsfeedAdminPassword"])
{
bool enableNewsfeed = false;
enableNewsfeed = Convert.ToBoolean(actionRequest.EnableNewsfeedAppPool);
string sPath = "IIS://" + ConfigurationManager.AppSettings["MachineName"] + "/W3SVC/AppPools/" + ConfigurationManager.AppSettings["AppPoolName"];
Console.WriteLine(sPath);
DirectoryEntry w3svc = new DirectoryEntry(sPath);
if (enableNewsfeed)
{
w3svc.Invoke("Start");
}
else
{
w3svc.Invoke("Stop");
}
}
}
catch (Exception ex)
{
throw ex;
}
return null;
}
错误如下:
访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED)) 说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.UnauthorizedAccessException:访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限。ASP.NET 有一个基本进程标识(通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 和 IIS 7 上的网络服务,以及 IIS 7.5 上配置的应用程序池标识),如果应用程序不是模拟的,则使用该标识。如果应用程序通过 模拟,则身份将是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的请求用户。
我意识到这是一个权限问题,但我不确定我必须授予访问权限以及授予什么用户权限。
仅供参考:我已经启用了 IIS 6 元数据库和 WMI 兼容性