wcf2011.06.16 15:57

내가 처한 사항은 이랬다.

 

모든것을 WCF Rest서비스로 구축하고 마지막으로 파일 업로드 를 구현하여 로컬에서 서비스를 돌려서

 

했더니 파일 업로드가 잘 작동 되었다.

 

근데 이게 왜 안되는지 IIS에만 서비스를 올리면 WebRequestError 400 Request 에러가 나는것이였다.

 

구글링을 했지만 너무 많은 경우에 수라 포기… 그렇다면 디버깅은 혹시 될까?

 

예전에 iis process(w3wp)를 잡아서 디버깅을 해본적이 있던터라 그걸로 해볼려고 했지만 까먹어서 실패 ㅋㅋ

 

그러다가 우연히 Microsoft Service Trace Viewer를 보게 되었다.

 

참고 :http://blogs.msdn.com/b/aszego/archive/2010/02/01/tool-of-the-month-servicemodeltraceviewer.aspx

 

이걸 사용하면 서비스에서 어떤일이 일어나는지 자세하게 알수 있겠구나 해서 실행을 해보았다.

 

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\SvcTraceViewer.exe에서 실행하면 된다(윈7)

 

자 실행을 하고 open을 할려니 svclog 확장자를 가진 파일이 필요하다.. 아이게 로그 파일이구나라고 순식간에 직감했다.

 

일단 web.config 에 이 부분을 추가한다.

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information,ActivityTracing"
          propagateActivity="true">
        <listeners>
          <add name="ServiceModelTraceListener"/>
        </listeners>
      </source>
      <source name="System.Net.Sockets" switchValue="Information">
        <listeners>
          <add name="ServiceModelTraceListener"/>
        </listeners>
      </source>
      <source name="System.Net" switchValue="Information">
        <listeners>
          <add name="ServiceModelTraceListener"/>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="d:\client_tracelog.svclog"
          type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          name="ServiceModelTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"/>
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

 

추가 가 끝나면 저위에 경로 d:\client_tracelog.svclog에 기록될것이다.

 

이것을 open 하면 된다. 그럼 이렇게 에러를 잡을수 있다.

 

 

image

 

내가 왜 파일 업로드가 안되었는지 IIS에서만!!! 확인해보니 폴더 권한이 없었던 것이다!!

 

그래서 폴더 권한을 준후 다시 실행하니 잘되었다.

Posted by 동동(이재동)