7

我们有一个 WCF 服务几个月来一直运行良好。就在今天早上,对该服务的调用开始失败,代理服务器报告“对等方重置连接”(502)。奇怪的是,没有 IIS 日志条目记录已断开的连接,尽管我们能够使用 WireShark 检测到它们。因此,似乎线程正在死去,没有留下任何痕迹。

有问题的网络方法是检索 100 条数据库记录。我们发现,通过将结果限制为 20 条记录,它可以按预期工作。我怀疑有一个超时起作用,但无一例外或回溯都很难知道。

有没有人经历过这个?关于如何解决它的任何建议?

4

2 回答 2

19

您可以在您的服务上打开 WCF 诊断以获取有关异常的更多详细信息。

为了让您快速上手 - 在您的网络(或应用程序)配置中:

1) 在配置元素下的任意位置添加 System.Diagnostics 部分。您可以将路径替换为您希望存储文件的路径。

<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>
      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelTraceListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\temp\services_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
        <filter type="" />
      </add>
      <add initializeData="C:\temp\services_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
        <filter type="" />
      </add>
    </sharedListeners>
  </system.diagnostics>

2) 在 system.ServiceModel 下添加以下内容:

<diagnostics wmiProviderEnabled="false">
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>

3) 在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ 下启动 SvcTraceViewer.exe。加载消息跟踪 (services_messages.svclog) 和服务跟踪日志 (services_tracelog.svclog)。您可以在工具中拖放文件或打开一个然后添加另一个

4) 寻找问题的红色粗体字母。

如果您想让编辑 WCF 配置的体验更令人满意,您可以使用与 SvcTraceViewer.exe (#3) 位于同一文件夹下的 SvcConfigEditor.exe。只需打开配置文件,您应该会看到 Diagnostics 文件夹,它允许您启动/停止和配置诊断。

于 2012-06-05T22:22:46.337 回答
2

至于故障排除,WCF 跟踪有时可以帮助找出这些问题。

于 2012-06-05T22:17:30.217 回答