2012-02-22 1 views
0

IIS에서 실행되는 ASP.NET 웹 사이트와 함께 AppDomains의 섀도 복사본 기능에 문제가 있습니다. 문제는 사용 권한이 충분하지 않기 때문에 섀도 복사 된 파일을 IIS 사용자가 읽거나 실행할 수 없다는 것입니다.
System.IO.FileLoadException : 파일 또는 어셈블리를로드 할 수 없습니다 'My.Namespace.AssemblyName, 버전 새로운 응용 프로그램 도메인의 코드가 (DoCallBack를 통해 콜백 메소드를 통해) 실행될 때IIS6에서 실행되는 ASP.NET 사이트에서 AppDomain 섀도 복사 된 파일 액세스가 거부되었습니다.

나는 다음과 같은 오류 메시지가 = 0.0.3.2231, 문화 = 중립, PublicKeyToken = null '또는 종속성 중 하나. 접근이 금지되어있다.

퓨전 로그 :

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를 : /를 Inetpub/wwwroot에/웹 스위트/위젯'폴더 읽기 및 사용자에 대한 실행 권한 '네트워크 서비스 '.
섀도 복사 기능을 해제하면 모든 것이 잘됩니다.
Visual Studio 2008의 로컬 컴퓨터에서도 문제없이 실행됩니다.
위젯 폴더의 모든 파일 (폴더 자체 대신)에 읽기 및 실행 권한을 부여해도 문제가 해결되지 않습니다.
C :

나는 그것이 ASP.NET 임시 파일 폴더의 권한으로해야 할 생각 \ WINDOWS \ Microsoft.NET 프레임 워크 \ \ V2.0.50727 임시 \ ASP.NET 파일 \ 웹 제품군을
이를 폴더에있는 모든 하위 폴더와 그 안에있는 파일은 'NETWORK SERVICE'사용자에 대해 & 권한을 읽고 읽습니다. 그래서 그게 문제가 아니에요.

짧게 :
내 사이트 (IIS6에서 실행)가 새 AppDomain의 섀도 복사본 파일에 액세스 할 수없는 이유는 무엇입니까?

+0

안녕하세요. 나는 같은 문제가있다. 마침내 해결책을 찾았습니까? –

+0

아니요, 마지막으로 별도의 AppDomain을 사용하지 않고 대신 기본 ASP.NET AppDomain (이미 쉐도우 복사 기능을 사용하도록 설정되어 있음)을 사용하기로 결정했습니다.이 솔루션의 유일한 단점은 플러그인이 bin 디렉토리에 있어야한다는 것입니다. 관습 국장이 아니야. –

답변

0

문제점의 원인은 CachePath 기본값입니다. 네트워크 서비스에서 AppPool을 실행하면 DefaultUser 임시 폴더 위치가 사용됩니다 (이유를 모르겠습니다). 그러나 네트워크 서비스는 폴더에 대한 액세스 권한이 없으므로 예외가 발생합니다. 해결 방법은 CachePath를 명시 적으로 설정하는 것입니다. 예를 들어 ASP.NET AppPool 캐시 경로를 사용할 수 있습니다.

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

감사합니다. 고마워요! 나는 이것을 시험 할 상황이 아니지만 당신의 대답을 받아 들일 것입니다. –

0

은이 같은 -ga 옵션을 aspnet_regiis을 실행 해보십시오 :의 MachineName \ 계정 이름이 당신의 응용 프로그램 풀의 ID입니다

aspnet_regiis -ga MachineName\AccountName

.

+0

감사합니다. 사이트에서 사용하는 응용 프로그램 풀의 ID는 "네트워크 서비스"입니다. 그래서 나는'aspnet_regiis -ga "Network Service"를 제안했지만 행운이 없었습니다. 사이트를 다시 시작한 후에도 System.IO.FileLoadException (액세스가 거부 됨)이 표시됩니다. –