티스토리 뷰

어느날 잘 되던 닷넷 웹서버에서 아래와 같은 오류가 발생합니다.

응용 프로그램에 서버 오류가 있습니다.

임시 디렉터리에 대한 액세스가 거부되었습니다. XmlSerializer가 실행되는 ID 'NT AUTHORITY\NETWORK SERVICE'에 권한이 부족하여 임시 디렉터리에 액세스할 수 없습니다. CodeDom은 프로세스가 컴파일을 수행하는 데 사용하고 있는 사용자 계정을 사용하므로 사용자가 시스템 임시 디렉터리에 액세스하지 않으면 컴파일할 수 없습니다. Path.GetTempPath() API를 사용하여 임시 디렉터리 위치를 확인하십시오.

설명: 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 스택 추적을 검토하여 발생한 오류 및 코드에서 오류가 발생한 위치에 대한 자세한 정보를 확인하십시오.

예외 정보: System.UnauthorizedAccessException: 임시 디렉터리에 대한 액세스가 거부되었습니다. XmlSerializer가 실행되는 ID 'NT AUTHORITY\NETWORK SERVICE'에 권한이 부족하여 임시 디렉터리에 액세스할 수 없습니다. CodeDom은 프로세스가 컴파일을 수행하는 데 사용하고 있는 사용자 계정을 사용하므로 사용자가 시스템 임시 디렉터리에 액세스하지 않으면 컴파일할 수 없습니다. Path.GetTempPath() API를 사용하여 임시 디렉터리 위치를 확인하십시오.

ASP.NET에는 요청한 리소스에 액세스할 권한이 없습니다. ASP.NET 요청 ID에 리소스 액세스 권한을 부여하십시오. ASP.NET에는 응용 프로그램이 가장하지 않을 때 사용되는 기본 프로세스 ID(일반적으로 IIS 5에서는 {MACHINE}\ASPNET, IIS 6에서는 Network Service)가 있습니다. 응용 프로그램이 <identity impersonate="true"/>를 통해 가장하고 있는 경우에는 ID가 익명 사용자(일반적으로 IUSR_MACHINENAME) 또는 인증된 요청 사용자가 됩니다.

To grant ASP.NET access to a file, right-click the file in File Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

소스 오류: 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다. 아래의 예외 스택 추적을 사용하여 예외의 원인 및 위치 정보를 확인할 수 있습니다.

스택 추적:
[UnauthorizedAccessException: 임시 디렉터리에 대한 액세스가 거부되었습니다. XmlSerializer가 실행되는 ID 'NT AUTHORITY\NETWORK SERVICE'에 권한이 부족하여 임시 디렉터리에 액세스할 수 없습니다. CodeDom은 프로세스가 컴파일을 수행하는 데 사용하고 있는 사용자 계정을 사용하므로 사용자가 시스템 임시 디렉터리에 액세스하지 않으면 컴파일할 수 없습니다. Path.GetTempPath() API를 사용하여 임시 디렉터리 위치를 확인하십시오.]
   System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) +1617751
   System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) +2890
   System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) +125
   System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type) +813
   System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type) +139
   System.Web.Services.Protocols.SoapClientType..ctor(Type type) +520
   System.Web.Services.Protocols.SoapHttpClientProtocol..ctor() +306
   xWs.xPw..ctor() +16
   wUp.Page_Load(Object sender, EventArgs e) +1255
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428 

 

윈도우 서버는 2012 버전이었습니다. 몇시간을 헤매던 끝에 해결 하였습니다. 오류 내용이 무슨 권한이 없다는 내용이라서 찾던중에C:\windows\Temp 폴더의 권한을 바꿔줬습니다. windows에 temp폴더를 우클릭하여 [속성] 메뉴를 선택합니다.

Temp 속성 창이 뜨면 [보안] 탭으로 이동 후 [편집] 버튼을 눌러줍니다. 그 후 Users를 선택하여 모든 권한을 부여해 줍니다. [적용] -> [확인]으로 빠져나온 뒤에 잘되는지 확인해 보면 됩니다. 저는 이렇게 해결이 되었지만 다른 무언가가 있을지는 확신할 수는 없네요.

 

혹시 모르니 IIS관리자에서 [응용프로그램 풀]에서 사용하고 있는 풀의 [고급설정]에서 "프로세스 모델" 부분의 ID 값을 ApplicationPooldentity로 되어 있다면 NetworkService로 변경해서 테스트해 보시기 바랍니다.

 

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday