2012-07-13 69 views
3

鉴于以下方法,我试图启动/停止IIS 7应用程序池。我可以成功地做到这一点我的本地系统上,但是当我把这个我们的Windows 2008服务器上,我只得到一个错误试图阻止该服务时 - 启动正常工作:使用C#使用DirectoryEntry启动/停止IIS应用程序池需要哪些访问权限?

[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上为IIS35或IIS5上的 {MACHINE} \ ASPNET或IIS 7上的网络服务,以及在IIS 7.5上配置的应用程序池标识, ) 。如果应用程序是 模拟通过,身份将是 匿名用户(通常IUSR_MACHINENAME)或验证 请求用户。

我意识到这是一个权限问题,但我不知道我必须授予访问权限以及用户的权限。

FYI:我已经启用了IIS 6元数据库和WMI兼容性

+1

除非你是冒充作为管理员,所需的权限已被授予应用程序池标识用户。查看您的应用程序在哪个应用程序池标识下运行,并为该用户授予访问权限。 – Tariqulazam 2012-07-13 02:17:29

回答

1

下,你的代码运行时没有获得启动和停止的应用程序池的标识。以下是一篇文章的报价

“为了与Active Directory进行通信,必须考虑到网络安全,业务规则和技术限制,如果您使用的是ASP.NET页面中的Active Directory代码,必须确保代码具有访问和与目录交互的适当级别的权限为了开发或概念验证,您可以在ASP.NET级别(在web.config中)和IIS级别启用模拟,并且如果IIS服务器和目录域控制器都驻留在同一台机器上,但是,如果这些实体不在同一台服务器上(因为它们从不在生产环境中),则可以将代码包装在模拟类(例如Zeta Impersonator,它将在模拟用户的标记下执行号码簿呼叫。“

http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#3

而且这篇文章清楚地expains如何在你的应用程序下运行的差异的编码比特(posibliy更高级别的接取用户)上下文。

http://support.microsoft.com/kb/306158