반응형

'2020/02'에 해당되는 글 2건

반응형

405 method not allowed 해결방법

 

 

Windows Server 2008 R2 Standard 서버를 사용하다가

 

 

서버 EOS 가 되면서 Windows Server 2016 Standard 버전을 사용하게 되었다.

 

 

내부 시스템을 전환하기 위해서 소스와 서버 환경을

 

 

순차적으로 옮기는 과정이 순조롭게 진행되는가 싶더만

 

 

최종과정에서 확인하려고 접속해보니 405 오류가 발생하는 것이다.

 

 

 

 

 

오류 메세지 보기

원격 서버에서 (405) 메서드를 사용할 수 없음 오류를 반환했습니다. 

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

원격 서버에서 (405) 메서드를 사용할 수 없음 오류를 반환했습니다. 

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

예외 정보: System.Net.WebException: 원격 서버에서 (405) 메서드를 사용할 수 없음 오류를 반환했습니다. 

소스 오류 

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

스택 추적: 

[WebException: 원격 서버에서 (405) 메서드를 사용할 수 없음 오류를 반환했습니다.] 
   System.Net.HttpWebRequest.GetResponse() +1399 
   System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +55 

[ProtocolException: 원격 서버가 필요하지 않은 응답을 반환했습니다. (405) Method Not Allowed.] 
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +153 
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +336 
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 
   System.Web.UI.Control.OnLoad(EventArgs e) +95 
   System.Web.UI.Control.LoadRecursive() +59 
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678 

버전 정보:Microsoft .NET Framework 버전:4.0.30319; ASP.NET 버전:4.7.3163.0 


[WebException]: 원격 서버에서 (405) 메서드를 사용할 수 없음 오류를 반환했습니다. 
   위치: System.Net.HttpWebRequest.GetResponse() 
   위치: System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
[ProtocolException]: 원격 서버가 필요하지 않은 응답을 반환했습니다. (405) Method Not Allowed. 

Server stack trace:  
   위치: System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding) 
   위치: System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
   위치: System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) 
   위치: System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) 
   위치: System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
   위치: System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
   위치: System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]:  
   위치: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
   위치: System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
   위치: System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
   위치: System.Web.UI.Control.OnLoad(EventArgs e) 
   위치: System.Web.UI.Control.LoadRecursive() 
   위치: System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
[HttpUnhandledException]: 'System.Web.HttpUnhandledException' 형식의 예외가 Throw되었습니다. 
   위치: System.Web.UI.Page.HandleError(Exception e) 
   위치: System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
   위치: System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
   위치: System.Web.UI.Page.ProcessRequest() 
   위치: System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 
   위치: System.Web.UI.Page.ProcessRequest(HttpContext context) 
   위치: ASP.dashboard_aspx.ProcessRequest(HttpContext context) 
   위치: System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
   위치: System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) 
   위치: System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

자세한 오류 메시지를 표시하도록 ASP.NET이 를 사용하여 구성되었으므로 이 오류 페이지에는 중요한 정보가 포함될 수 있습니다.  
프로덕션 환경에서는  또는 를 사용하십시오.

 

 

 

 

 

구글링으로 찾아보니 대부분의 답변은

 

 

method 방식을 GET 을 사용하면 되는데 POST 를 사용하면 405 오류가 발생하더라

 

 

또는 Access-Control-Allow-Origin 을 헤더 정보에 넣어줘야 한다

 

 

등등 여러 답변이 있어서 대부분 적용해 보았지만 오류가 해결되지 않았다ㅠㅠ

 

 

#오류해결

 

소스나 web.config 파일에서 문제를 찾다가

 

 

설정쪽에 문제가 있진 않았을까 하고 구글 검색 방식을 바꿔보니

 

 

HTTP 활성화를 해줘야 한다는 것이다.

 

 

서버 역할에서 백날 빠진 게 있나 찾아봤었는데

 

 

다음단계인 기능에서 확인해볼 수 있는 내용이었다.

 

 

 

HTTP 활성화는 HTTP 를 통한 프로세스 활성화를 지원합니다.

HTTP 활성화를 사용하는 응용 프로그램은

네트워크에서 HTTP를 통해 도착하는 작업 항목에 대한 응답으로

동적으로 시작되고 중지될 수 있습니다.

 

 

라는 내용을 가지고 있는데

 

WCF 서비스에서 HTTP 활성화를 켜둬야 POST 나 GET method 를 사용할 수 있게 된다.

 

 

WCF 서비스는 Windows Communication Foundation 의 약자로

 

 

여러 응용프로그램을 커뮤니케이션(연결)해주는 서비스라고 생각하시면 됩니다.

 

 

.NET Framework 기능에서 HTTP 를 활성해주어야 정상적인 웹 동작을 할 수 있다는 것을 알게 되어서 기쁘네요^^

 

 

 

 

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

 

#파일이나 어셈블리 'Oracle.DataAccess'

 

 

 

IIS 에서 응용 프로그램을 추가 하고 서버에 접속하고 나니

 

아래와 같은 오류가 발생했습니다.

 

파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.  

 

 

 

 

이하 오류 내용



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

파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다. 
 설명: 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 스택 추적을 검토하여 발생한 오류 및 코드에서 오류가 발생한 위치에 대한 자세한 정보를 확인하십시오. 

예외 정보: System.BadImageFormatException: 파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.

소스 오류: 


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

어셈블리 로드 추적: 다음 정보는 'Oracle.DataAccess' 어셈블리를 로드할 수 없는 이유를 알아내는 데 도움이 됩니다.



경고: 어셈블리 바인딩 로깅이 꺼져 있습니다.
어셈블리 바인딩 오류 로깅 기능을 사용하려면 레지스트리 값 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)를 1로 설정하십시오.
참고: 어셈블리 바인딩 오류 로깅 기능을 사용하도록 설정하면 그렇지 않은 경우보다 성능이 약간 떨어집니다.
이 기능을 끄려면 레지스트리 값 [HKLM\Software\Microsoft\Fusion!EnableLog]를 제거하십시오.

  

스택 추적: 



[BadImageFormatException: 파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +225
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +110
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +22
   System.Reflection.Assembly.Load(String assemblyString) +34
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +48

[ConfigurationErrorsException: 파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +725
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +247
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +157
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +226
   System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +73
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +319
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +170
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +820

[HttpException (0x80004005): 파일이나 어셈블리 'Oracle.DataAccess' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +523
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +107
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +688

  


버전 정보: Microsoft .NET Framework 버전:4.0.30319; ASP.NET 버전:4.7.3163.0  

 

 


 

오류원인은 응용프로그램 풀에서 등록해 놓은 연결 프로그램이 32bit 프로그램을 사용하고 있는데

 

 

윈도우 서버 ( Windows Server Standard ) 2016 64비트 운영체제를 사용하고 있어서

 

 

default 로 세팅된 것이 64bit 로 설정되어 있어서 bit 수 오류가 발생하였다.

 

 

 

#해결방법

 

 

1. IIS 인터넷 정보 서비스 관리자

2. 응용 프로그램 풀

3. 응용 프로그램 선택

4. 고급설정

5. 32비트 응용 프로그램 사용 : False -> True 로 변경

 

 

32비트 응용 프로그램 사용은 64비트 운영 체제의 응용 프로그램 풀에 대해 True 로 설정하면

응용 프로그램 풀을 처리하는 작업자 프로세스가 WOW64 ( Windows on Windows64 ) 모드로 실행됩니다.

WOW64 모드의 프로세스는 32비트 응용 프로그램 모드만 로드하는 32비트 프로세스입니다.

 

 

다시 접속하니 한번에 해결!

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형