诊断事务应用程序

本主题介绍如何使用 Windows Communication Foundation (WCF) 管理和诊断功能来解决事务应用程序的问题。

性能计数器

WCF 提供了一组标准性能计数器,用于评估事务应用程序的性能。 有关详细信息,请参阅 性能计时器

性能计数器分为三个不同级别:服务、终结点和操作,如下表所述。

服务性能计数器

性能计数器 说明
Transactions Flowed(流动的事务数) 流向此服务中的操作的事务数。 每当发送到服务的消息中存在事务时,此计数器即会递增。
Transactions Flowed Per Second(每秒流动的事务数) 每秒钟流向此服务中的操作的事务数。 每当发送到服务的消息中存在事务时,此计数器即会递增。
Transacted Operations Committed(已提交的事务处理操作次数) 此服务中执行的事务处理操作数,这些操作的事务已完成,结果已提交。 这些操作下完成的工作已完全提交。 资源按照操作中完成的工作进行更新。
Transacted Operations Committed Per Second(每秒提交的事务处理操作次数) 此服务中每秒执行的事务处理操作数,这些操作的事务已完成,结果已提交。 这些操作下完成的工作已完全提交。 资源按照操作中完成的工作进行更新。
Transacted Operations Aborted(已中止的事务处理操作次数) 此服务中执行的事务处理操作数,这些操作的事务已完成,结果已中止。 这些操作下完成的工作已回滚。 资源恢复到它们的先前状态。
Transacted Operations Aborted Per Second(每秒中止的事务处理操作次数) 此服务中每秒执行的事务处理操作数,这些操作的事务已完成,结果已中止。 这些操作下完成的工作已回滚。 资源恢复到它们的先前状态。
Transacted Operations In Doubt(不确定的事务处理操作次数) 此服务中执行的事务处理操作数,这些操作的事务已完成,结果不确定。 完成的工作具有不确定的结果,即处于不确定状态。 资源保留在挂起的结果中。
Transacted Operations In Doubt Per Second(每秒不确定的事务处理操作次数) 此服务中每秒执行的事务处理操作数,这些操作的事务已完成,结果不确定。 完成的工作具有不确定的结果,即处于不确定状态。 资源保留在挂起的结果中。

终结点性能计数器

性能计数器 说明
Transactions Flowed(流动的事务数) 流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。
Transactions Flowed Per Second(每秒流动的事务数) 每秒钟流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。

操作性能计数器

性能计数器 说明
Transactions Flowed(流动的事务数) 流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。
Transactions Flowed Per Second(每秒流动的事务数) 每秒钟流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。

Windows Management Instrumentation

WCF 通过一个 WCF Windows Management Instrumentation (WMI) 提供程序在运行时公开服务的检测数据。 有关访问 WMI 数据的详细信息,请参阅使用 Windows Management Instrumentation 进行诊断

很多 WMI 只读属性都指示为服务应用的事务设置。 下表列出了所有这些设置。

在服务上,ServiceBehaviorAttribute 具有以下属性。

名称 Type 说明
ReleaseServiceInstanceOnTransactionComplete 布尔 指定当前事务完成后,是否回收服务对象。
TransactionAutoCompleteOnSessionClose 布尔 指定当前会话关闭时,挂起的事务是否已完成。
TransactionIsolationLevel 一个字符串,它包含 IsolationLevel 枚举的一个有效值。 指定此服务支持的事务隔离级别。
TransactionTimeout DateTime 指定必须完成事务处理的期限。

ServiceTimeoutsBehavior 具有以下属性。

名称 Type 说明
TransactionTimeout DateTime 指定必须完成事务处理的期限。

在绑定上,TransactionFlowBindingElement 具有以下属性。

名称 Type 说明
TransactionProtocol 一个字符串,它包含 TransactionProtocol 类型的一个有效值。 指定在流动事务时使用的事务处理协议。
TransactionFlow 布尔 指定是否启用传入事务流。

在操作上,OperationBehaviorAttribute 具有以下属性。

名称 Type 说明
TransactionAutoComplete 布尔 指定如果未发生未处理的异常,是否自动提交当前事务。
TransactionScopeRequired 布尔 指定操作是否需要事务。

在操作上,TransactionFlowAttribute 具有以下属性。

名称 Type 说明
TransactionFlowOption 一个字符串,它包含 TransactionFlowOption 枚举的一个有效值。 指定需要事务流的范围。

跟踪

通过跟踪,可以监视和分析事务应用程序中的错误。 可以使用以下方式启用跟踪:

  • 标准 WCF 跟踪

    这种类型的跟踪与跟踪任何 WCF 应用程序都是一样的。 有关更多信息,请参见 Configuring Tracing

  • WS-AtomicTransaction 跟踪

    WS-AtomicTransaction 跟踪可以通过使用 WS-AtomicTransaction 配置实用工具 (wsatConfig.exe) 来启用。 这种跟踪有助于详细了解系统中事务和参与者的状态。 若还要启用内部服务模块跟踪,可以将 HKLM\SOFTWARE\Microsoft\WSAT\3.0\ServiceModelDiagnosticTracing 注册表项设置为 SourceLevels 枚举的一个有效值。 你可以像在其他 WCF 应用程序中一样,启用消息日志记录。

  • System.Transactions 跟踪

    使用 OleTransactions 协议时,无法跟踪协议消息。 通过 System.Transactions 基础结构提供的跟踪支持(它使用 OleTransactions),用户可以查看事务上发生的事件。 若要为 System.Transactions 应用程序启用跟踪,请在 App.config 配置文件中包含以下代码。

    <configuration>  
      <system.diagnostics>  
         <sources>  
            <source name="System.Transactions" switchValue="Verbose, ActivityTracing">  
               <listeners>  
                  <add name="Text"  
                     type="System.Diagnostics.XmlWriterTraceListener"  
                     initializeData="SysTx.log"  
                     traceOutputOptions="Callstack" />  
               </listeners>  
            </source>  
         </sources>  
         <trace autoflush="true" indentsize="4">  
         </trace>  
      </system.diagnostics>  
    </configuration>  
    

    这样,也会启用 WCF 跟踪,因为 WCF 同样利用 System.Transactions 基础结构。

请参阅