2012-02-22 4 views
0

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

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

журнал

Fusion:

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. 

То, что я уже сделал:
я предоставил "C:// Wwwroot/Web Сюита Inetpub/виджетов папки чтения и разрешение выполнения для пользователя«NETWORK SERVICE ».
Когда я выключаю функцию копирования теней, все идет хорошо.
Даже на моем локальном компьютере под Visual Studio 2008 он работает без каких-либо проблем.
Предоставление всех файлов (а не самой папки) в папке «Виджеты». Разрешение на чтение и выполнение не устраняет проблему.

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

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

+0

Здравствуйте. У меня такая же проблема. Вы наконец нашли решение? –

+0

Нет, я, наконец, решил не использовать отдельный AppDomain, но вместо этого использовал ASP.NET AppDomain по умолчанию (у которого уже включена функция теневого копирования), единственным недостатком этого решения является то, что плагины должны находиться в каталоге bin и не пользовательский каталог. –

ответ

0

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

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

Это имеет смысл, спасибо! Я не в состоянии проверить это, но я буду отмечать ваш ответ как принятый. –

0

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

aspnet_regiis -ga MachineName\AccountName

где MachineName \ AccountName являются идентичность пула приложений.

+0

Спасибо, Джаред. Идентификатором пула приложений, который использует сайт, является «Network Service». Поэтому я просто попробовал «aspnet_regiis -ga» Network Service », как вы предлагали, но не повезло. Даже после перезагрузки сайта я все равно получаю исключение System.IO.FileLoadException (доступ запрещен). –