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>
这两部分的配置结合起来应该可以做到!
为了立即将您的消息写回日志文件,您可能需要将设置添加到您的 <system.diagnostics>
部分:
<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 尝试设置跟踪以进行调试,而不是写入日志文件的主要内容,如果未能解决你的问题,请参考以下文章
将 MSMQ 端到端跟踪与 WCF 跟踪和应用程序级日志记录相关联