zoukankan      html  css  js  c++  java
  • (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:WCFLogweb_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:WCFLogweb_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配置”


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



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



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



    注: 当用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>


  • 相关阅读:
    SimpleRetryTemplateSupplier
    Atcoder Grand Contest 013 E Placing Squares(组合意义转化+矩阵快速幂/代数推导,思维题)
    Atcoder Grand Contest 033 D Complexity(dp)
    Vue案例之计数器
    Redis数据类型之List列表类型
    Redis数据类型之Hash哈希类型
    Vue之vfor列表展示
    Vue初体验
    RedisDesktopManager本地连接云服务器上的Redis
    Redis数据类型之ZSet有序集合类型
  • 原文地址:https://www.cnblogs.com/rstar/p/8654262.html
Copyright © 2011-2022 走看看