2012-07-13 65 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