首页 > 解决方案 > 是否可以在 WCF 跟踪文件 (.svclog) 中记录异常“无法分配...的托管内存缓冲区”?

问题描述

我的应用程序正在使用托管在 IIS 上的 WCF 服务,其中服务器计算机的 RAM 大小为 4GB。当我从客户端应用程序调用服务请求时,我收到异常“无法分配 134217728 字节的托管内存缓冲区。可用内存量可能很低”。虽然服务中的 try-catch 块没有捕获异常,但我在客户端应用程序中得到了异常。因此,我启用了 WCF 跟踪并验证了此文本的 .svclog 文件。似乎这个异常也没有记录在跟踪文件中。

是否可以记录此异常?如果是这样,是否可以通过跟踪文件来做到这一点,我应该如何配置我的 WCF 来启用它?

请在下面找到我用来在 WCF 中启用跟踪的配置文件片段。

<system.diagnostics>
    <sources>
      <source propagateActivity="false" name="System.ServiceModel"
        switchValue="Information, Critical, Error, ActivityTracing">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="Information, Critical, Error, ActivityTracing">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\Temp\logs\Traces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
        name="xml" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
        <filter type="" />
      </add>
    </sharedListeners>
    <trace autoflush="true">
      <listeners>
        <add initializeData="C:\Temp\logs\Traces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
          name="xml">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true"
        logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
 </system.serviceModel>

任何帮助深表感谢。

标签: c#.netwcfout-of-memory

解决方案


推荐阅读