wcf 尝试设置跟踪以进行调试,而不是写入日志文件

Posted

技术标签:

【中文标题】wcf 尝试设置跟踪以进行调试,而不是写入日志文件【英文标题】:wcf trying to set up tracing to debug, not writing to log file 【发布时间】:2011-02-20 11:52:18 【问题描述】:

这是我的 web.config,在 IIS7 上的应用程序中运行 WCF 服务,但没有将任何内容写入指定文件。文件的权限已授予所有人。

<system.diagnostics>
  <sources>
   <source name="System.ServiceModel" switchValue="Information, ActivityTracing,     error, warning, critical" propagateActivity="true">
    <listeners>
     <add name="traceListener"
  type="System.Diagnostics.TextWriterTraceListener"
  initializeData="c:\log\tracestext.log" />

    </listeners>
  </source>
  </sources>
 </system.diagnostics>

我可以添加服务引用就好了。 然后我尝试从 Windows 应用程序调用该服务,几分钟后,在运行 Windows 应用程序的机器上出现错误“客户端无法在配置的超时 (00:00:00) 内完成安全协商。当前的谈判段是 1 (00:00:00)。"

但绝对没有任何内容写入配置中指定的跟踪日志文件。

我还需要做些什么来启用跟踪吗?感谢您的帮助

编辑:“来源”部分现在与此处推荐的部分匹配:http://msdn.microsoft.com/en-us/library/aa702726.aspx

我已将“diagnostics .messagelogging”部分添加到“system.servicemodel”

并且事件查看器显示:“消息记录已打开。敏感信息可能会以明文形式记录,即使它是在网络上加密的:例如,消息正文。 进程名称:w3wp 进程 ID:1784 "

但是日志文件还是空的

【问题讨论】:

【参考方案1】:

是的 - 您刚刚定义了一些 .NET 跟踪源和侦听器 - 但您还没有指示 WCF 实际进行跟踪!

你还需要:

<system.serviceModel>
    <diagnostics>
        <messageLogging 
            logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false"
            logMalformedMessages="true" logEntireMessage="true"
            maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" />
    </diagnostics>
</system.serviceModel>

这两部分的配置结合起来应该可以做到!

为了立即将您的消息写回日志文件,您可能需要将设置添加到您的 &lt;system.diagnostics&gt; 部分:

<system.diagnostics>
    ... everything you already have....

    <trace autoflush="true" />
</system.diagnostics>

【讨论】:

好的进展!这出现在应用程序事件查看器中:消息记录已打开。敏感信息可能会以明文形式记录,即使它是在线加密的:例如,消息体。进程名称:w3wp 进程 ID:1784 但在几次失败的服务调用后日志文件仍然为空。 @Joey J:在我的答案中添加了一个额外的项目 - 试试吧。【参考方案2】:

要写入日志文件,请确保运行 Web 应用程序的身份具有对日志目录的写入权限。

您可以在 IIS 7 管理控制台中找到该标识。选择您的 Web 应用程序正在使用的应用程序池。单击高级设置... 在属性窗口中,查找身份字段。它可能会说网络服务。这是需要对您的日志输出文件夹具有写入权限的帐户。

如果您在此目录中已有日志文件,请尝试将其删除并让框架创建它。

希望这会有所帮助。

【讨论】:

【参考方案3】:

    确保您已配置 system.diagnostics 和 System.serviceModel/diagnostics 部分已配置。

    确保在正确 App.config/Web.config 文件中配置了它们。需要注意的是,多 配置文件可能存在于项目中,使用的文件取决于 构建配置。

我个人有同样的症状,直到我注意到我将这些部分放在 app.config 下(在我的情况下,客户端跟踪),而不是 app.DebugLocal.config。后者用作我的构建配置设置为 DebugLocal

【讨论】:

【参考方案4】:

问题可能是由于在配置文件中指定的日志目录中写入权限所致。 如果您不确定上下文中的用户是谁,请授予所有机器用户写入权限。

在日志目录右键 点击“安全”标签 点击编辑 在“组名或用户”部分,选择“用户 MachineName\Users” 在“权限”部分授予写入权限

对我来说效果很好。

【讨论】:

以上是关于wcf 尝试设置跟踪以进行调试,而不是写入日志文件的主要内容,如果未能解决你的问题,请参考以下文章

在调试模式下以编程方式设置 WCF 超时

WCF中记录SOAP消息日志

将 MSMQ 端到端跟踪与 WCF 跟踪和应用程序级日志记录相关联

WCF 最大消息大小配额

Python + logging输出到屏幕,将log日志写入到文件

跟踪日志位置,在哪里查看它们