2009-09-20 107 views
0

我想在使用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

+2

什麼是完整的異常追蹤? – 2009-09-20 05:33:05

+0

「RPC服務器不可用」看起來像......無法找到IIS主機。 – 2009-09-20 06:01:26

回答

1

我通過將AppPool設置爲「本地系統」來工作。但是這可能會導致一些安全問題。有沒有更好的解決方案?

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

+0

最好的解決方案是永遠不要以這種方式回收應用程序池。爲什麼你需要從ASP.NET應用程序那樣做?如果其他應用程序部署到同一個池中,該怎麼辦?您的回收請求可以將它們全部分解。 – 2009-09-20 12:36:32

+1

@ Mike108:看到這個更好更簡單的解決方案:http://daron.yondem.com/PermaLink.aspx?guid=d82b6b05-8c59-4136-becd-329156083b75 – 2009-12-14 16:49:29

1

您的初始文章在機器名稱中的「localhost」之後有一個空格。如果你刪除這個,會發生什麼?

此外,您需要確保運行此代碼的ASP.NET用戶進程具有重新啓動其他應用程序池的適當權限。您可以使用模擬來執行此操作(錯誤),也可以按照異常中的指示來允許用戶處理對其他應用程序的適當權限。池。

+0

哦,是的。我刪除「本地主機」後的空間,然後錯誤更改爲「異常來自HRESULT:0x80070005(E_ACCESSDENIED)」 – Mike108 2009-09-20 07:48:29

+0

「RPC服務器不可用」錯誤不是真正的錯誤,這是因爲有一個空格後「本地主機「在我的初始職位。刪除空間後,真正的錯誤是來自HRESULT的異常:0x80070005(E_ACCESSDENIED)。 – Mike108 2009-09-21 01:13:16

0

異常拋出,因爲誰運行應用程序的用戶如果要做到這一點,你需要給管理員PRIVILEG用戶或創建一個分開的應用程序沒有管理員權限

Exception from HRESULT: 0x80070005 (E_ACCESSDENIED) 

這監控您的應用程序的狀態並在需要時回收。

相關問題