Доступ к теневому копированию файла AppDomain запрещен с сайтом ASP.NET, работающим на IIS6 - PullRequest
0 голосов
/ 22 февраля 2012

У меня возникли проблемы с функцией теневого копирования доменов приложений в сочетании с веб-сайтом ASP.NET, работающим под управлением IIS.Проблема заключается в том, что теневые скопированные файлы не могут быть прочитаны или выполнены пользователем IIS из-за недостаточных разрешений.

Я получаю следующее сообщение об ошибке при выполнении кода в новом домене приложений (через метод обратного вызова черезDoCallBack):
System.IO.FileLoadException: не удалось загрузить файл или сборку 'My.Namespace.AssemblyName, версия = 0.0.3.2231, Culture = нейтральный, PublicKeyToken = null' или одну из ее зависимостей.Доступ запрещен.

Журнал Fusion:

<i>Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = My.Namespace.AssemblyName, Version=0.0.3.2231, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Inetpub/wwwroot/Web Suite/Widgets
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using host configuration file: \\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet.config
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Inetpub/wwwroot/Web Suite/Widgets/My.Namespace.AssemblyName.DLL.
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated.
</i>

Что я уже сделал:
Я предоставил доступ к папке 'C: / Inetpub / wwwroot / Web Suite / Widgets'и разрешение на выполнение для пользователя «NETWORK SERVICE».
Когда я отключаю функцию теневого копирования, все идет хорошо.
Даже на моем локальном компьютере в Visual Studio 2008 он работает без проблем.
Предоставление всехфайлы (вместо самой папки) в папке Widgets разрешение на чтение и выполнение не решает проблему.

Я думал, что это связано с разрешениями для папки временных файлов ASP.NET:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ web suite
Эта папка, все ее подпапки и файлы в них имеют разрешения на чтение, чтение и выполнение для пользователя 'NETWORK SERVICE».Так что это тоже не проблема.

Короче говоря:
Почему мой сайт (работающий под IIS6) не может получить доступ к теневым копиям файлов нового домена приложений?

Ответы [ 2 ]

0 голосов
/ 21 августа 2012

Причиной проблемы является значение по умолчанию CachePath.Если AppPool запускается под сетевым сервисом, используется местоположение временной папки DefaultUser (я не знаю почему).Но у Network Service нет доступа к папке, и это является причиной исключения.Решение состоит в том, чтобы установить CachePath явно.Например, мы можем использовать путь кеша ASP.NET AppPool:

var domainInfo = new AppDomainSetup
  {
    CachePath = AppDomain.CurrentDomain.SetupInformation.CachePath
    /* ...*/
  };
0 голосов
/ 22 февраля 2012

Попробуйте запустить aspnet_regiis с опцией -ga, подобной этой:

aspnet_regiis -ga MachineName\AccountName

где MachineName \ AccountName - это идентификатор пула приложений.

...