Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是<;消息记录>;标记内的do<;系统诊断>&书信电报;诊断学>;在生产WCF系统中包含是否不好?_Wcf_Trace - Fatal编程技术网

什么是<;消息记录>;标记内的do<;系统诊断>&书信电报;诊断学>;在生产WCF系统中包含是否不好?

什么是<;消息记录>;标记内的do<;系统诊断>&书信电报;诊断学>;在生产WCF系统中包含是否不好?,wcf,trace,Wcf,Trace,在WCF服务的production web.config文件中,我看到了下面包含的配置,我想知道标记的影响是什么(如果有的话)?基于这个标签不应该在那里,但我想知道它的影响是什么。如果可能的话,我更愿意留下它(它安装在许多站点上,因此更新起来会很痛苦),前提是它不会对性能产生重大影响 <system.serviceModel> ... (lots more stuff) ... <diagnostics wmiProviderEnabled="true"

在WCF服务的production web.config文件中,我看到了下面包含的配置,我想知道
标记的影响是什么(如果有的话)?基于这个标签不应该在那里,但我想知道它的影响是什么。如果可能的话,我更愿意留下它(它安装在许多站点上,因此更新起来会很痛苦),前提是它不会对性能产生重大影响

  <system.serviceModel>

    ... (lots more stuff) ...

    <diagnostics wmiProviderEnabled="true">
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" />
    </diagnostics>
  </system.serviceModel>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>    
    </sources>

    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="ServiceTrace.svclog" />
    </sharedListeners>
  </system.diagnostics>

... (更多的东西)。。。

与大多数诊断问题一样,答案是“视情况而定”

它做什么: 标记设置了当侦听器发现消息并决定记录它时应该记录的内容。如果您只有
diagnostics\messageLogging
标记设置,而没有任何类型的“源”设置,那么它将完全不起作用。(以下是每个设置的含义:)

在代码示例中,您确实有一个源代码。源代码来自
系统。ServiceModel
开关值设置为仅侦听警告消息。在
sharedlistener
下还有一个
xmlwritertracelistener
,它基本上是一个xml日志编写器。
initializeData
值就是这个xml日志文件的名称。查看应用程序根目录,您应该会看到一个名为
ServiceTrace.svclog
的文件

因此,基本上您的应用程序只记录警告级别的WCF消息,记录完整消息,并且只保留3000个日志

生产中是否包含不良内容? 这要看情况。如果您的应用程序每小时被攻击数百万次,需要每盎司的速度,每一个CPU周期,我都会删除它。如果没有,那我就把它放在里面。根据我看到的和其他人报告()的计时,设置“警告”对性能的影响可以忽略不计。如果启用调试/信息/活动跟踪,则情况就不同了,会降低性能

如果您确实有一个bug或者您的服务变得不稳定,那么这些日志可能是有益的


如果您现在正在生产环境中运行此功能,请查看ServiceTrace.svclog文件并查看其中有多少条目。如果你每秒钟记录很多日志,那么我会将其关闭(或修复警告)。您可以使用SvcTraceViewer.exe查看实际跟踪

谢谢!我对记录到ServiceTrace.svclog的跟踪有一个了解,我想知道的是,打开WMI是否会有额外的开销。从你的回答来看,这似乎是一个“不”,对吗?轻微的开销。我们每次通话可能会通话一毫秒(如果是的话)。我将继续运行一些负载测试,以验证在您的场景中您是否看到了这种类型的性能。打开它而不记录任何内容是非常简单的。当达到messageLogging元素中定义的maxMessagesToLog限制时会发生什么?是否保留了最后n个日志条目(最近),其中n最多为maxMessagesToLog?在这里再添加一个问题-当我测试logEntireMessage时,整个消息在服务日志中以纯文本形式随时可用。出于安全考虑,是否可以对日志中的信息进行加密?当然,只有系统管理员才能访问.svclog文件,但是是否可以调整记录的消息,例如通过WCF消息检查器?