跟踪对WCF服务进行的所有调用(及其堆栈)
我有一个WCF服务,目前正在生产中。代码性能不是我们希望的,我们无法在登台环境中重现 我想知道是否可以记录服务和服务对每个方法的调用。本质上,我想要一个所有调用和时间戳的顺序列表(我们的代码不是多线程的)跟踪对WCF服务进行的所有调用(及其堆栈),wcf,performance,logging,Wcf,Performance,Logging,我有一个WCF服务,目前正在生产中。代码性能不是我们希望的,我们无法在登台环境中重现 我想知道是否可以记录服务和服务对每个方法的调用。本质上,我想要一个所有调用和时间戳的顺序列表(我们的代码不是多线程的) 有没有一种方法可以实现这一点,而不必对二进制文件进行处理。在web.config中的system.diagnostic节点下是否有我们可以更改的跟踪级别?检查并可选地使用并检查收集的数据-您也可以构建跟踪侦听器以记录跟踪,例如记录到数据库。WCF还提供。您是否在配置文件中配置了跟踪?这是一篇关
有没有一种方法可以实现这一点,而不必对二进制文件进行处理。在web.config中的system.diagnostic节点下是否有我们可以更改的跟踪级别?检查并可选地使用并检查收集的数据-您也可以构建跟踪侦听器以记录跟踪,例如记录到数据库。WCF还提供。您是否在配置文件中配置了跟踪?这是一篇关于这个主题的好文章 以下是您可以根据需要使用和修改的示例配置:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="ServiceModel"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\ServiceModel.svclog" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="MessageLogging"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\MessageLogging.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="True"
logMalformedMessages="False"
logMessagesAtServiceLevel="True"
logMessagesAtTransportLevel="False"
maxMessagesToLog="10000"
maxSizeOfMessageToLog="10000" />
</diagnostics>
</system.serviceModel>
(SvcTraceViewer.exe)查看生成的日志。听起来您需要分析您的服务。在这种情况下,我看不出堆栈跟踪将如何帮助您。是否有像jstack、pstack或lsstack这样的实用程序?一组详尽的函数调用跟踪将让您猜测什么是最主要的原因。在随机时间采集的一组中等大小的堆栈跟踪会让您很好地了解需要花费的时间,因为所花费的时间越大,捕获的样本就越多。令人惊讶的是,在您真正清楚地了解需要花费的时间之前,所需的堆栈样本是如此之少。