(WCF初体验)WCF服务器诊断

      WCF服务器搭建好之后,不管是客户端访问还是本地调试,出个问题抛出来的原因往往在我们看来都是不知所以然的,更可能是跑出来的问题和真正的问题差了很远,比如“通信对象 System.ServiceModel.ServiceHost 无法用于通信,因为其处于“出错”状态。”这种错误就会有各种各样的原因所以这时候就必须用到WCF服务器的诊断功能了。

     而要实现服务器的诊断功能,我们一般就是用服务器跟踪器来生成日志文件,然后查看日志文件来根据我们调用服务时,服务器所出现的问题。 要开启这项功能需要配置WCF服务器,如下面代码所示,主要包括诊断的定义和开启诊断。

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:12px;"><system.diagnostics>
        <sources>
            <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
                <listeners>
                    <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                        <filter type="" />
                    </add>
                    <add name="ServiceModelMessageLoggingListener">
                        <filter type="" />
                    </add>
                </listeners>
            </source>
            <source propagateActivity="true" name="System.ServiceModel" switchValue="Warning,ActivityTracing">
                <listeners>
                    <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                        <filter type="" />
                    </add>
                    <add name="ServiceModelTraceListener">
                        <filter type="" />
                    </add>
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add initializeData="D:\WCFLog\web_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
                <filter type="" />
            </add>
            <add initializeData="D:\WCFLog\web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
                <filter type="" />
            </add>
        </sharedListeners>
        <trace autoflush="false" />
    </system.diagnostics></span></span>
<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:12px;"> <diagnostics>
      <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true"
        logMessagesAtTransportLevel="true" />
    </diagnostics></span></span>

 对于初学者我建议的是用WCF编辑器来自己配置而不是直接复制配置文件的代码。右键你的config文件 选择“编辑WCF配置”

(WCF初体验)WCF服务器诊断

(WCF初体验)WCF服务器诊断(WCF初体验)WCF服务器诊断

如图,把消息日志和跟踪都选择启动

(WCF初体验)WCF服务器诊断(WCF初体验)WCF服务器诊断

(WCF初体验)WCF服务器诊断

然后就是配置侦听器的InitData,也是就日志文件保存的地方。(这里注意一下,如果你通过直接改配置来修改这个地址,请保证地址上的文件夹要存在),把两个侦听器的InitData都配置好。

(WCF初体验)WCF服务器诊断

(WCF初体验)WCF服务器诊断

最后保存在启动服务,当访问服务的时候就会在你指定的位置生成web_messages.svclog 和web_tracelog.svclog两个文件,用TraceView打开web_tracelog.svclog,详细列出了你所有访问的打开,操作和结束。当然会有高亮的颜色显示警告和错误,点击这条记录会在右边显示详细信息和提示信息。这样就可以看到导致异常的真正原因。

(WCF初体验)WCF服务器诊断(WCF初体验)WCF服务器诊断

(WCF初体验)WCF服务器诊断

注: 当用WCF编辑器配置诊断的时候,可能他会生成如下的代码,请将中文的警告改成Warning。

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:12px;"> <sources>
            <source name="System.ServiceModel.MessageLogging" switchValue="警告,ActivityTracing"></span></span>


上一篇:领导说 自带流量 + 3000薪资


下一篇:前端工程化系列[05] Yeoman脚手架使用入门