我想咆哮和狂欢,真的,非常糟糕,因为这似乎完全令人难以置信。相反,我会尝试尽可能清楚地描述我的情况,并希望有人会轻拍我的肩膀并指出我明显的错误并让我继续欢快。
我有一个客户端/服务器应用程序,其中服务器是一组IIS托管的WCF服务。因此,有合同,我有服务代码实现它们。当我发布Now时,我遇到了nettcp绑定的双工合同问题,即使客户端通道缓存在服务器上以供以后在静态列表中使用,也不会在第一次响应后保持活动状态,从不关闭,有适当的超时设置等,但bugger不想工作。
所以我想我会添加一些痕迹来写出一些关于我的服务实现代码可能存在问题的额外信息。这是我已经设置的System.ServiceModel跟踪源的补充,它记录了所有服务模型的内容,幸好一段时间以来一直没有问题。下面是我的web.config相关部分的两个不同版本,我试图获得定期跟踪来写入文件:
1:
<system.diagnostics>
<trace autoflush="true" indentsize="4">
</trace>
<sources>
<source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
<!--use switchValue="All" or "Verbose" for more information-->
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="DuplexSource" switchValue="All" propagateActivity="true">
<listeners>
<add name="txt" />
</listeners>
</source>
</sources>
<sharedListeners>
<remove name="Default" />
<add name="txt" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\Logs\XXXErrorLog.txt" traceOutputOptions="Callstack" />
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\Logs\ServerTraces.svclog" />
</sharedListeners>
当我设置它时,我在我的服务代码TraceSource duplexSource = new TraceSource("DuplexSource");
中创建一个TraceSource对象,然后我使用该跟踪源写出语句。永远不会创建该文件,永远不会尝试创建该文件(使用Process Monitor我可以看到它永远不会尝试)。文件权限是全开的,xml监听器的另一个日志文件运行得非常好。
2,我还尝试了更直接的Trace配置:
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="txt" />
</listeners>
</trace>
<sources>
<source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
<!--use switchValue="All" or "Verbose" for more information-->
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
<sharedListeners>
<remove name="Default" />
<add name="txt" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\Logs\XXXErrorLog.txt" traceOutputOptions="Callstack" />
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\Logs\ServerTraces.svclog" />
</sharedListeners>
</system.diagnostics>
同样,甚至都没有尝试创建日志文件。现在,我已经在运行时检查过我可以通过实际操作将文件写入该目录,然后我写了一个测试文件Trace.Listeners集合的内容来验证我的监听器是否在那里,它是什么。我甚至将directy称为Listener的write方法,这实际上确实可以创建文件并且WriteLine
调用成功地按预期写入文件。然而,使用System.Diagnostic.Trace.WriteLine
无效。
有什么可能导致这种情况的想法?