我们有一个 WCF 服务几个月来一直运行良好。就在今天早上,对该服务的调用开始失败,代理服务器报告“对等方重置连接”(502)。奇怪的是,没有 IIS 日志条目记录已断开的连接,尽管我们能够使用 WireShark 检测到它们。因此,似乎线程正在死去,没有留下任何痕迹。
有问题的网络方法是检索 100 条数据库记录。我们发现,通过将结果限制为 20 条记录,它可以按预期工作。我怀疑有一个超时起作用,但无一例外或回溯都很难知道。
有没有人经历过这个?关于如何解决它的任何建议?
您可以在您的服务上打开 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 文件夹,它允许您启动/停止和配置诊断。
至于故障排除,WCF 跟踪有时可以帮助找出这些问题。