zoukankan      html  css  js  c++  java
  • WCF 第九章 诊断 服务跟踪查看器

    我们已经描述了如何为跟踪和消息日志开启多个选项,但是那些诊断工具的输出结果如何才能被高效地利用呢?甚至在一段时间内,跟踪和消息日志可以产生大量数据。

      WCF使用一个被称作服务跟踪查看器的强大工具来分析诊断日志。这个工具可以用来从一个分布式应用程序的一个或多个组件导入跟踪和消息日志文件。在安装了Windows SDK 以后,你可以通过所有程序-> 微软视窗SDK->工具菜单找到服务跟踪查看器。

    提示 配置SelfHost 例子
    在这一部分,我们已经为客户端和服务端工程开启了跟踪和消息日志功能。为了在你的电脑上使用,你可以使用先前描述的服务配置编辑器来在两个工程中开启消息日志功能,选择详细信息级别并保持其他设置默认。在配置完以后,运行应用程序来生成客户端和服务端日志文件。

       让我们使用服务跟踪查看器来分析由SelfHost例子生成的日志文件。运行服务跟踪查看器并选择文件,从主窗体打开。找到SelfHost/client 目录并选择跟踪(app_trace.svclog)和消息日志文件(messages.svclog)(通过在选择每个的时候按住Shift键).确保同时选中它们,因为如果你使用一个打开一个的话会导致先前载入进来的信息被清空(以后我们将使用文件,添加来合并额外的日志文件)。

    活动视图

    服务跟踪视图可以用来合并多个跟踪源的内容和日志文件。图片9.7显示了已经载入SelfHost客户端工程日志文件的服务跟踪查看器。

    图片9.7 载入了客户端跟踪和消息日志的服务跟踪查看器

      屏幕上显示了默认活动视图下的合并结果。左边面板列出了每个活动以及它们包含的跟踪数目,间隔,开始时间,结束时间。当选中一个或者多个活动时,右上面板显示了与选中活动关联的独立跟踪源。

    提示 警告和异常
    服务跟踪查看器显示了包含黄色高亮的警告跟踪活动。那些在它们的跟踪信息中的异常用红色文本显示。

      第一个活动,000000000000,是一个专用的根活动记录,其他所有的活动都由它连接。向下移动这个列表,我们看到在程序运行时客户端处理的活动。首先,ChannelFactory被构造并打开,开启与服务的通信过程。

      每次服务调用都是一个处理动作活动。在我们的跟踪中有四种客户端代码调用的服务,Add, Subtract, Multiply, Divide 。客户端也生成一个服务端绑定选项要求的安全会话(创建安全会话)。

      单击多个活动并注意在左上面板中显示的相关跟踪源列表。你可以看到跟踪源的类型以及一个简单的描述。我们将稍后看到检测这些跟踪的另外的一些选项。

    工程视图

    另外一个视图,工程视图,可以通过在左边面板点击工程标签来显示。服务跟踪查看器支持工程的概念。一个功能允许你确定多个在功能打开时被载入的跟踪和日志文件。当你有很多合作方(比如,一个客户端调用多个服务)并且要一起调试多个实例时通常很有用。从文件目录,在你已经载入了你想要关联的工程以后选择保存工程。

    消息视图

    消息视图列出了所有的日志消息,与任何相关活动独立。这对快速地找到一条特殊的消息很有用-例如,发送给多个服务端的消息-检测它的内容。

      图片9.8 显示了消息视图,高亮显示从客户端发送给Divide 服务的消息。

    图片9.8 服务跟踪查看器消息视图

    图形视图

    图形视图是最复杂的,虽然在服务跟踪查看器中仍然是潜在的有用选项。你可以通过在先前视图双击任何活动或者消息以及或者选择图形标签来访问它。图形视图与图9.9 中的显示类似。

    图片9.9 服务跟踪查看器图形视图

      在这个视图中,活动现在被组织成跨过左边面板上面的形式。垂直”泳道”显示那些活动中的每条跟踪记录,在相关活动的连接。在左边选择任意一个跟踪记录右边将会高亮显示在那条活动记录所有跟踪源中的信息。

      这个视图的主要用户将在我们从服务工程选择跟踪文件以后看到。

    提示 在线服务跟踪查看器
    尽管服务跟踪查看器对服务交互的事后分析是很精彩的,一个简单的称作在线服务跟踪查看器的工具,提供了一个可供选择的方案。这个应用程序使用一个自定义的TraceListener和一个Windows 显示基础架构(WPF)接口来接收并显示它发生时的诊断信息,这可以是非常有用的,尤其避免了在开发过程中手动持续载入正在运行的日志文件的过程。
    注意在线服务跟踪查看器并不被微软支持,但是它确实一个WCF诊断服务可以如何扩展的很好的例子。
    关于细节信息以及代码可以在http://blogs.msdn.com/craigmcmurtry/archive/2006/09/19/762689.aspx 找到。

    从多个源分析日志

    尽管对一个单独的服务或者客户端来说使用服务跟踪查看器来查看日志是有用的,但是当日志文件从一个分布式应用程序的中添加多于一个的参与者时工具和端到端跟踪功能的实际能力都是有限的。

      为了查看这些内容,选择文件->添加(与文件->打开->与当前的载入日志合并新日志不同),然后选择SelfHost服务工程的跟踪和消息日志。服务日志文件将会被导入并与先前载入的客户端日志文件关联,如图9.10显示。

    图片9.10 服务跟踪查看器载入服务端和客户端日志文件

    正如你看到的,对我们来说有更多的可用细节。活动列表现在同时显示客户端工程和服务端工程的活动记录。

      通过双击Subtract服务调用的过程动作活动或者单击上面的图片tab键来选择它。你应该看到与图片9.11类似的视图。

      现在我们可以知道图像视图如何帮助我们想象而不是把服务端和客户端之间的复杂接口暴露给我们看。主面板上面组织了宿主的活动,在我们的例子中式服务端和客户端。将鼠标指针移动到每个活动的上面来查看它的描述。当你展开活动中的跟踪时,你可能看到活动之间的虚拟连接指向。

      在图片9.11中,你可以看到客户端给服务端发送一条消息,服务通过调用Subtract方法处理消息,然后创建一条反馈消息并发回给客户端。这个设想是可行的因为端到端的跟踪和使用关联来连接活动。

    图片9.11 活动转换的服务跟踪查看器的视图

      单击图片9.11中高亮跟踪旁边的+ 图标来向我们展示细节的另一个层次。图片9.12显示了结果细节。

      一个新的活动在service.vshost块下显示,执行”Microsoft.ServiceModel.Samples.ICalculator.Subtract”.如果已经有任何异常或者警告被跟踪,我们将会在视图中对应看到黄色三角号或者红色圆。通过展开细节来显示包含的活动并获取活动和宿主之间是如何相互关联的,你可以快速地使用服务跟踪查看器来定位不可预料行为的源,无论你是否是一个创建分布式应用的程序员或者一个在生产环境中研究报告问题的IT专家。

    图片9.12 展开了子调用活动的服务跟踪查看器

    过滤结果

    你可能会发现,特别对于生产环境中产生的日志文件,定位到跟踪日志和消息日志中的特定信息是一个挑战。例如,你可能知道一个特定的用户会话导致非预期行为(为了更好的说明这个例子,让我们假设没有任何异常或者警告抛出,仅有不正常的数据)。这将是一个及其具有挑战的方面,但是服务跟踪查看器提供了一个灵活的结果来找到并且过滤入口。

      在工具栏,搜索选项允许你快速地搜索所有满足相关条件的跟踪信息。例如,输入Divide并单击搜索。跟踪列表将会高亮显示那些包含这个词的跟踪信息。

      你可以使用查看窗口来快速地限制满足你的条件的跟踪源的显示。在下拉菜单中单击搜索并选择搜索条件(如,开始时间)。查找元素将变得可用。输入你最早开始搜索的时间并单击过滤。活动列表将仅显示那些在开始时间以及之后的活动。你也可以使用级别选项来选择你想要查看的消息的级别(如,警告)。清空按钮将结果返回到统一视图。

      最强大的过滤选项是创建并保存自定义过滤器功能。在跟踪列表上面单击创建自定义过滤器按钮然后你可以看到类似图片9.13的对话框。

    图片9.13 在服务跟踪查看器中创建一个自定义过滤器

      编辑器允许由一个或者多个XPath表达式组成。在左边面板的节点和属性默认是那些在创建自定义过滤器按钮点击以后被选中的活动或者跟踪源。选择你想要查找的属性然后为过滤器添加名字和属性。最后点击OK,你可以在最上面的工具栏中的搜索列表中选择你的自定义过滤器来构建仅显示满足你的自定义过滤器要求的入口内容。


    作者:DanielWise
    出处:http://www.cnblogs.com/danielWise/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    leetcode 5414 收藏清单
    leetcode 714 买卖股票的最佳时机含手续费(dp)
    春招的一个记录
    leetcode 560 和为k的子数组(前缀和 + map)
    机器学习--激活函数篇
    leetcode 回文链表(O(1)空间复杂度)
    Leetcode 659 分割数组为连续子序列 (贪心)
    论文笔记:MeLU: Meta-Learned User Preference Estimator for Cold-Start Recommendation
    jni.h头文件详解一
    JNI笔记
  • 原文地址:https://www.cnblogs.com/danielWise/p/1964623.html
Copyright © 2011-2022 走看看