2

WCF RESTサービスを取得しましたが、このサービスから受信/送信されたすべてのメッセージをログに記録したいと思います。私のapp.configで、次の構成を取得しました。

 <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>

このバインディングをサービスに使用しています

 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,     
            }
        };

そしてこの操作コントラクト(はい、aspxページをエミュレートします)

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

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>

これに関するどんな助けもいいでしょう。

4

1 に答える 1

0

私の推測では、POSTデータがデフォルトのメッセージログの長さを超えています。

maxSizeOfMessageToLog = "200000"をmessageLogging要素に追加してみましたか?(もちろん、必要に応じてサイズを設定できます)

これが私がうまく使っている設定です。

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

乾杯クリス

于 2012-11-21T13:31:30.607 に答える