簡體   English   中英

IIS6上運行的ASP.NET站點拒絕AppDomain卷影復制文件訪問

[英]AppDomain shadow copied file access denied with ASP.NET site running on IIS6

我將AppDomains的卷影復制功能與在IIS下運行的ASP.NET網站結合使用時遇到了一些麻煩。 問題在於,由於權限不足,IIS用戶無法讀取或執行卷影復制文件。

當執行新AppDomain中的代碼時(通過通過DoCallBack的回調方法),我得到以下錯誤消息:
System.IO.FileLoadException:無法加載文件或程序集“ My.Namespace.AssemblyName,版本= 0.0.3.2231,區域性=中性,PublicKeyToken =空”或其依賴項之一。 訪問被拒絕。

融合日志:

我已經做了什么:
我已授予用戶“網絡服務”“ C:/ Inetpub / wwwroot / Web Suite / Widgets”文件夾的讀取和執行權限。
當我關閉卷影復制功能時,一切正常。
即使在Visual Studio 2008下的本地計算機上,它也可以正常運行。
授予Widgets文件夾中的所有文件(而不是文件夾本身)讀取和執行權限並不能解決問題。

我認為這與ASP.NET臨時文件文件夾上的權限有關:
C:\\ WINDOWS \\ Microsoft.NET \\ Framework \\ v2.0.50727 \\ ASP.NET臨時文件\\ Web套件
該文件夾,其所有子文件夾以及其中的文件對用戶“網絡服務”具有讀取和讀取及執行權限。 所以這也不是問題。

簡而言之:
為什么我的站點(在IIS6下運行)無法訪問新AppDomain的卷影復制文件?

問題的原因是CachePath默認值。 如果AppPool在網絡服務下運行,則使用DefaultUser臨時文件夾位置(我不知道為什么)。 但是網絡服務無權訪問該文件夾,這是出現異常的原因。 解決方案是顯式設置CachePath。 例如,我們可以使用ASP.NET AppPool緩存路徑:

var domainInfo = new AppDomainSetup
  {
    CachePath = AppDomain.CurrentDomain.SetupInformation.CachePath
    /* ...*/
  };

嘗試使用-ga選項運行aspnet_regiis ,如下所示:

aspnet_regiis -ga MachineName\\AccountName

其中MachineName \\ AccountName是您的應用程序池的標識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM