2012-11-21 2 views
2

WCF REST Service가 있는데이 서비스의 모든 메시지가 기록되도록하고 싶습니다. 이 (예, 그것은 에뮬레이트 aspx 페이지)WCF REST 메시지 로깅, POST 요청 문제

[OperationContract(Name = "process.aspx")] 
     [WebInvoke(Method = "POST",ResponseFormat = WebMessageFormat.Xml)] 
      Stream ProcessRequest(Stream data); 
내 서비스

WebHttpBinding basicWebBinding = new WebHttpBinding 
     { 
      MaxReceivedMessageSize = int.MaxValue, 
      MaxBufferSize = int.MaxValue, 
      MaxBufferPoolSize = int.MaxValue, 
      CloseTimeout = new TimeSpan(0, 3, 0), 
      OpenTimeout = new TimeSpan(0, 3, 0), 
      ReceiveTimeout = new TimeSpan(0, 3, 0), 
      TransferMode = TransferMode.Buffered, 
      SendTimeout = new TimeSpan(0, 3, 0), 
      WriteEncoding = Encoding.UTF8, 
      ReaderQuotas = new XmlDictionaryReaderQuotas() 
      { 
       MaxStringContentLength = int.MaxValue,  
      } 
     }; 

이 조작 계약에 대한 바인딩을 사용하여

<system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" 
     logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" /> 
    </diagnostics> 
    </system.serviceModel>  
<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing"> 
      <listeners> 
       <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
        <filter type="" /> 
       </add> 
       <add name="ServiceModelMessageLoggingListener"> 
        <filter type="" /> 
       </add> 
      </listeners> 
     </source>  
    </sources> 
    <sharedListeners> 
     <add initializeData="logs\\messages.svclog" 
       type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> 
       <filter type="" /> 
      </add> 
    </sharedListeners> 
    <trace autoflush="true" /> 
    </system.diagnostics> 

난`내의 app.config에서 나는이 구성을 가지고

Everythig는 괜찮은 것처럼 보이지만 요청에 대한 POST 데이터를 볼 수 없습니다. 예 :

<MessageLogTraceRecord> 
<HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace"> 
<Method>POST</Method> 
<QueryString></QueryString> 
<WebHeaders> 
<Connection>keep-alive</Connection> 
<Content-Length>123</Content-Length> 
<Content-Type>application/x-www-form-urlencoded</Content-Type> 
<Accept>text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</Accept> 
<Accept-Encoding>gzip, deflate</Accept-Encoding> 
<Accept-Language>ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3</Accept-Language> 
<Host>localhost</Host> 
<Referer>http://localhost/...</Referer> 
<User-Agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0</User-Agent> 
</WebHeaders> 
</HttpRequest> 
<Binary xmlns=""></Binary> 
</MessageLogTraceRecord> 
이에

및 응답

<MessageLogTraceRecord> 
<HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace"> 
<Method>POST</Method> 
<QueryString></QueryString> 
<WebHeaders> 
<Connection>keep-alive</Connection> 
<Content-Length>159</Content-Length> 
<Content-Type>application/x-www-form-urlencoded</Content-Type> 
<Accept>*/*</Accept> 
<Accept-Encoding>gzip, deflate</Accept-Encoding> 
<Accept-Language>ru</Accept-Language> 
<Host>localhost...</Host> 
<User-Agent>agent</User-Agent> 
</WebHeaders> 
</HttpRequest>... stream ...</MessageLogTraceRecord> 

어떤 도움도 좋을 것이다.

답변

0

내 생각에 POST 데이터가 기본 메시지 로깅 길이를 초과합니다.

messageLogging 요소에 maxSizeOfMessageToLog = "200000"을 추가 했습니까? (분명히 필요에 따라 크기를 설정할 수 있음)

다음은 내가 성공적으로 사용하는 설정입니다.

<messageLogging 
logEntireMessage="true" 
logMalformedMessages="false" 
logMessagesAtServiceLevel="true" 
logMessagesAtTransportLevel="false" 
maxMessagesToLog="3000" 
maxSizeOfMessageToLog="200000"/> 

건배 크리스

+0

나는 메시지 크기에 문제가 있는지가 윈도우 이벤트 로그에 항목을 추가 생각합니다. –

+0

불행하게도 maxSizeOfMessageToLog를 설정해도이 문제가 해결되지 않았습니다. 요청시 이 계속 발생하고 logMessagesAtTransportLevel = "false"인 경우 : ... stream ... 응답으로 – Yaroslav

+0

스트림이 당신을 deserialise에 괜찮아오고 있습니까? 이 내용이 콘텐츠 형식으로 판단되는 양식 게시물에서 온 것 같습니다. –