本主题介绍如何使用 Windows Communication Foundation (WCF) 管理和诊断功能对事务应用程序进行故障排除。
性能计数器
WCF 提供一组标准性能计数器,用于测量事务应用程序的性能。 有关详细信息,请参阅 性能计时器。
性能计数器的范围限定为三个不同的级别:服务、终结点和操作,如下表所述。
服务性能计数器
性能计数器 | DESCRIPTION |
---|---|
Transactions Flowed(流动的事务数) | 流向此服务中的操作的事务数。 每当发送到服务的消息中存在事务时,此计数器即会递增。 |
每秒事务流数 | 每秒钟流向此服务中的操作的事务数。 每当发送到服务的消息中存在事务时,此计数器即会递增。 |
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(每秒不确定的事务处理操作次数) | 此服务中每秒执行的事务处理操作数,这些操作的事务已完成,结果不确定。 结果不确定的工作处于未确定状态。 资源保留在挂起的结果中。 |
终结点性能计数器
性能计数器 | DESCRIPTION |
---|---|
Transactions Flowed(流动的事务数) | 流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。 |
每秒事务流数 | 每秒钟流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。 |
操作性能计数器
性能计数器 | DESCRIPTION |
---|---|
Transactions Flowed(流动的事务数) | 流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。 |
每秒事务流数 | 每秒钟流向此终结点上的操作的事务数。 每当发送到终结点的消息中存在事务时,此计数器即会递增。 |
Windows管理工具
WCF 通过一个 WCF Windows Management Instrumentation (WMI) 提供程序在运行时公开服务的检测数据。 有关访问 WMI 数据的详细信息,请参阅使用 Windows Management Instrumentation 进行诊断。
很多 WMI 只读属性都指示为服务应用的事务设置。 下表列出了所有这些设置。
在服务中,ServiceBehaviorAttribute
具有以下属性。
名称 | 类型 | DESCRIPTION |
---|---|---|
ReleaseServiceInstanceOnTransactionComplete | 布尔型 | 指定在当前事务完成时是否回收服务对象。 |
TransactionAutoCompleteOnSessionClose | 布尔型 | 指定当前会话关闭时,挂起的事务是否已完成。 |
事务隔离级别 (TransactionIsolationLevel) | 包含 IsolationLevel 枚举中有效值的字符串。 | 指定此服务支持的事务隔离级别。 |
TransactionTimeout | DateTime | 指定事务必须在其内完成的时间段。 |
以下是 ServiceTimeoutsBehavior
的属性。
名称 | 类型 | DESCRIPTION |
---|---|---|
TransactionTimeout | DateTime | 指定事务必须在其内完成的时间段。 |
在绑定上,TransactionFlowBindingElement
具有以下属性。
名称 | 类型 | DESCRIPTION |
---|---|---|
TransactionProtocol | 包含TransactionProtocol类型的有效值的字符串。 | 指定在流动事务时使用的事务处理协议。 |
TransactionFlow | 布尔型 | 指定是否启用传入事务流。 |
在操作上,OperationBehaviorAttribute
具有以下属性。
名称 | 类型 | DESCRIPTION |
---|---|---|
交易自动完成 | 布尔型 | 指定如果未发生未经处理的异常,是否自动提交当前事务。 |
TransactionScopeRequired | 布尔型 | 指定操作是否需要事务。 |
在操作中,TransactionFlowAttribute
具有以下属性。
名称 | 类型 | DESCRIPTION |
---|---|---|
TransactionFlowOption | 包含 TransactionFlowOption 枚举中有效值的字符串。 | 指定需要事务流的范围。 |
追踪
利用跟踪记录,可以监视和分析事务应用程序中的故障。 可以使用以下方法启用跟踪:
标准 WCF 跟踪
这种类型的跟踪与跟踪任何 WCF 应用程序相同。 有关详细信息,请参阅 配置跟踪。
WS-AtomicTransaction 跟踪
可以通过使用 WS-AtomicTransaction 配置工具 (wsatConfig.exe) 启用 WS-AtomicTransaction 跟踪。 此类跟踪提供对系统中事务和参与者状态的见解。 若还要启用内部服务模块跟踪,可以将
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 基础结构。