Enterprise Library 数据访问应用程序块的部署和操作
本文档维护在:http://wiki.entlib.net.cn/EntlibHelp31DataAccessApplicationBlock.ashx。
管理员的二个主要任何是数据访问应用程序块的初始部署是有计划和可管理的,并且后继更新将对已存在的使用应用程序块的应用程序有着最少的影响。此节将解决这些管理主题:
将数据访问应用程序块部署为私有程序集
如果应用程序不必须使用来自全局程序集缓存中的可用服务,数据访问应用程序块程序集就可以被部署在应用程序的目录结构中。这简化了部署,因为可以使用 xcopy 命令在目标计算机中安装整个应用程序,包括数据访问应用程序块程序集。如果在同一计算机中的多个应用程序都使用数据访问应用程序块,就可以在每个应用程序的文件夹层次中安装一个程序集副本。通过这样做,就可以独立的更新每个程序集的副本。
将数据访问应用程序块部署为共享程序集
可 以用签署一个强名称到数据访问应用程序块。这是一个用于安全原因的推荐实践。Visual Studio .NET 和 .NET Framework SDK 都包含了用于强名称签名的工具。在程序集强命名后,它们就可以被部署在一个共享部署而被多个应用程序所使用。可以部署程序集到任何文件系统位置,然后在使 用数据访问应用程序块的每个应用程序的配置文件中添加 <codeBase> 元素以指定程序集的位置。对于如何强命名 Enterprise Library 程序集的解释,请参见强命名 Enterprise Library 程序集。
一个更加相似的场景是在全局程序集缓存中部署共享程序集,这允许在计算机上的所有应用程序都使用同样的程序集。可以使用下列工具之一来在全局程序集缓存中安装程序集,或者可以拖放程序集到程序集文件夹中:
更新私有程序集
如果数据访问应用程序块程序集已被部署为私有程序集,就可以通过用新的 DLL 来替换在应用程序文件夹层次中的早期版本来部署升级。
更新共享程序集
在 共享配置中升级数据访问应用程序块的程序集的最容易的方法是在全局程序集缓存中安装更新的 DLL 。默认情况下,通用语言运行时尝试加载最新的构建和版本号但与应用程序构建时所使用的程序集有着同样的主和次版本号的程序集。因此,如果主和次版本号没有 改变,添加更加新的版本到全局程序集缓存中将自动更新所有引用数据访问应用程序块程序集的应用程序。
如果主或次版本号已增加,或者如果新 的版本导致了已存在应用程序的兼容性问题,就可以覆盖默认的版本策略。要指定将使用的程序集的特定版本,修改应用程序的配置文件(用于单个应用程序)或者 机器策略文件。另一种方法是,是将程序集的新的版本与发布者策略文件一起发布以重定向程序集请求到新的版本。
速率计数器展示了随着时间变化的事件增长的数量,并通过时间内的改变来分割值以显示活动的速率。关于性能计数器的更多信息,请参见 PerformanceCounterType Enumeration 。
表 1 列出了数据访问应用程序块事件日志实体。监听器列是触发事件的类,事件列是事件的名称,异常列是异常的布尔值,主要消息列是主要的错误消息,其他列是可用的任何附加信息。
下面表格描述了每个 WMI 事件的属性。
表 1 描述了ConnectionFailedEvent WMI 事件的属性。
表 2 描述了 CommandFailedEvent WMI 事件的属性
表 3 描述了 DataConfigurationFailureEvent WMI 事件的属性
管理员的二个主要任何是数据访问应用程序块的初始部署是有计划和可管理的,并且后继更新将对已存在的使用应用程序块的应用程序有着最少的影响。此节将解决这些管理主题:
- 部署数据访问应用程序块
- 更新数据访问应用程序块
- 度量数据访问应用程序块
7.1 - 部署数据访问应用程序块
使用数据访问应用程序块的应用程序可以在下列二种配置之一中部署:- 在应用程序文件夹层次中的做为私有程序集
- 在任何文件系统位置或者在全局程序集缓存中的共享程序集。
将数据访问应用程序块部署为私有程序集
如果应用程序不必须使用来自全局程序集缓存中的可用服务,数据访问应用程序块程序集就可以被部署在应用程序的目录结构中。这简化了部署,因为可以使用 xcopy 命令在目标计算机中安装整个应用程序,包括数据访问应用程序块程序集。如果在同一计算机中的多个应用程序都使用数据访问应用程序块,就可以在每个应用程序的文件夹层次中安装一个程序集副本。通过这样做,就可以独立的更新每个程序集的副本。
将数据访问应用程序块部署为共享程序集
可 以用签署一个强名称到数据访问应用程序块。这是一个用于安全原因的推荐实践。Visual Studio .NET 和 .NET Framework SDK 都包含了用于强名称签名的工具。在程序集强命名后,它们就可以被部署在一个共享部署而被多个应用程序所使用。可以部署程序集到任何文件系统位置,然后在使 用数据访问应用程序块的每个应用程序的配置文件中添加 <codeBase> 元素以指定程序集的位置。对于如何强命名 Enterprise Library 程序集的解释,请参见强命名 Enterprise Library 程序集。
一个更加相似的场景是在全局程序集缓存中部署共享程序集,这允许在计算机上的所有应用程序都使用同样的程序集。可以使用下列工具之一来在全局程序集缓存中安装程序集,或者可以拖放程序集到程序集文件夹中:
- 安装程序,如 Microsoft Windows Installer, version 2.0
- 全局程序缓存工具命令行实用程序(Gacutil.exe)
- .NET 管理 MMC 插件(Mscorcfg.msc)
7.2 - 更新数据访问应用程序块
如果数据访问应用程序块的升级版本已可用,就可以安装新的版本,然后所有应用程序使用更新的程序集。然而,如果新的版本对某些应用程序引入了兼容性问题,就可以将新的版本安装到全局程序集缓存中,然后配置一些应用程序使用它,而其他的继续使用早期的版本。更新私有程序集
如果数据访问应用程序块程序集已被部署为私有程序集,就可以通过用新的 DLL 来替换在应用程序文件夹层次中的早期版本来部署升级。
注意:要保留早期版本的副本,如果使用新的程序集带来了任何兼容问题,就可以恢复到早期的版本。
更新共享程序集
在 共享配置中升级数据访问应用程序块的程序集的最容易的方法是在全局程序集缓存中安装更新的 DLL 。默认情况下,通用语言运行时尝试加载最新的构建和版本号但与应用程序构建时所使用的程序集有着同样的主和次版本号的程序集。因此,如果主和次版本号没有 改变,添加更加新的版本到全局程序集缓存中将自动更新所有引用数据访问应用程序块程序集的应用程序。
如果主或次版本号已增加,或者如果新 的版本导致了已存在应用程序的兼容性问题,就可以覆盖默认的版本策略。要指定将使用的程序集的特定版本,修改应用程序的配置文件(用于单个应用程序)或者 机器策略文件。另一种方法是,是将程序集的新的版本与发布者策略文件一起发布以重定向程序集请求到新的版本。
7.3 - 度量数据访问应用程序块
在应用程序的配置文件中有一些用于开启或关闭度量的节。它们是可选的,但在配置文件中必须同时存在或同时不存在。如果忽略它们,它们将与所有的值都为 false 一样。<configSections>节是告诉 System.Configuration 库如何读取实际配置数据的地方。实际的数据在 <instrumentationConfiguration>节中。设置值为 true 以开启度量,设置值为 false 关闭度量。度量的三种类型是性能计数器、事件日志和 WMI 事件。<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="instrumentationConfiguration"
type="Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.Configuration.InstrumentationConfigurationSection,
Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<instrumentationConfiguration performanceCountersEnabled="true" eventLoggingEnabled="true" wmiEnabled="true" />
</configuration>
7.4 - 数据访问应用程序块性能计数器
表 1 列出了数据访问应用程序块性能计数器。性能计数器名称 | 描述 |
---|---|
Commands Executed/sec | 数据库命令执行的速率。 |
Commands Failed/sec | 数据库命令执行失败的速率。 |
Connections Failed/sec | 数据库连接打开失败的速率。 |
Connections Opened/sec | 数据库连接打开的速率。 |
速率计数器展示了随着时间变化的事件增长的数量,并通过时间内的改变来分割值以显示活动的速率。关于性能计数器的更多信息,请参见 PerformanceCounterType Enumeration 。
7.5 - 数据访问应用程序块事件日志实体
数据访问应用程序块被度量到用于各种事件的应用程序事件日志的日志实体。表 1 列出了数据访问应用程序块事件日志实体。监听器列是触发事件的类,事件列是事件的名称,异常列是异常的布尔值,主要消息列是主要的错误消息,其他列是可用的任何附加信息。
监听器 | 事件 | 异常 | 主要消息 | 其他 |
---|---|---|---|---|
DataInstrumentationListener | ConnectionFailed | true | 在使用实例名数据库实例试图打开数据库连接时发生错误。 | 连接字符串使用的是连接字符串。 |
DefaultDataEventLogger | ConfigurationError | true | 在创建数据库数据库时发生配置错误。 |
7.6 - 数据访问应用程序块 WMI 事件
数据访问应用程序块使用下列 WMI 事件进行度量:- ConnectionFailedEvent
- CommandFailedEvent
- DataConfigurationFailureEvent
下面表格描述了每个 WMI 事件的属性。
表 1 描述了ConnectionFailedEvent WMI 事件的属性。
WMI 属性 | 描述 |
---|---|
ConnectionString | 导致失败的连接字符串。 |
ExceptionMessage | 用于在连接失败时触发的异常的消息。 |
InstanceName | 连接失败的数据库提供程序的 ID ,就是在配置文件中指定的名称。 |
UtcTimeStamp | 连接失败的时间。 |
表 2 描述了 CommandFailedEvent WMI 事件的属性
WMI 属性 | 描述 |
---|---|
CommandText | 失败的数据库命令。 |
ConnectionString | 在命令失败时所使用的连接字符串。 |
ExceptionMessage | 在连接失败时触发的异常的消息。 |
InstanceName | 遭受命令失败的数据库提供程序的 ID ,就是在配置文件中指定的名称。 |
UtcTimeStamp | 命令失败的时间。 |
WMI 属性 | 描述 |
---|---|
ExceptionMessage | 当试图创建或者配置一个数据库失败时触发的异常的消息。 |
InstanceName | 无法创建或配置的数据库提供程序的 ID ,就是在配置文件中指定的名称。 |
UtcTimeStamp | 配置失败发生的时间。 |