在开发和测试基于 Offline Application Block 的应用程序后,就可以在产品环境中部署该应用程序了。本章讨论如何通过为各种提供程序配置应用程序来部署应用程序。本章还讨论了在产品环境中部署应用程序时需要考虑的安全威胁和对策。
部署要求
在部署使用 Offline Application Block 的应用程序之前,请确保目标计算机安装了下列软件组件:
• Microsoft_ Windows_ XP Professional 操作系统
• Microsoft .NET Framework 1.1 版
此外,如果您要使用 Offline Application Block 随附的提供程序,则必须安装下列软件:
• 用于队列存储提供程序的 Microsoft 消息队列 (MSMQ)
• 用于队列/缓存存储提供程序的 Microsoft SQL Server™ 桌面引擎 (MSDE)
配置
提供程序是在您在 Microsoft Visual Studio_ .NET 部署系统项目中创建的 App.config 文件中定义的。在该文件中,每个类型的提供程序都对应于一个区段。
• ConnectionManagerProviders ? 此区段包含用于检测应用程序物理连接状态的策略的配置信息。该应用程序块随附的连接检测提供程序使用 Windows 网络 API (WinInet) 来检测网络连接是否存在。
• QueueManagerProviders ? 此区段包含用于存储消息的提供程序(包括 MSMQQueueStorageProvider、MSDEQueueStorageProvider、IsolatedStorageQueueStorageProvider 和 InMemoryQueueStorageProvider)的配置信息。
• CryptographicSettings ? 此区段包含用于加密提供程序设置的配置信息。
• CacheManagerSettings ? 此区段包含用于 Caching Application Block 的配置信息。有关 Caching Application Block 的详细信息,请参阅 Caching Application Block 文档。Offline Application Block 将独立存储缓存提供程序作为用于缓存的附加提供程序。
“ConnectionManagerProviders”和“QueueManagerProviders”区段都具有一个名为 <providers 的元素,它包含“连接管理”和“消息数据管理”子系统的策略。每个策略或提供程序都在 <providers 区段下有一个相应的子元素。表 4.1 中列出了每个提供程序所具有的公共特性集。
表 4.1 提供程序的公共特性
每个提供程序所需的自定义属性被表示为子元素。
ConnectionManagerProviders
以下配置文件摘录显示了 ConnectionManagersProviders 区段是如何在 App.config 中定义的:
...
<configuration
<configSections
<section name="ConnectionManagerProviders" type="Microsoft.ApplicationBlocks.SmartClient.Offline.MultiProviderConfigHandler,Microsoft.ApplicationBlocks.SmartClient.Offline,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" /
</configSections
</configuration
...
以下配置文件摘录显示了 ConnectionManagerProviders 区段的详细内容:
...
<ConnectionManagerProviders
<provider name="connectionDetectionStrategy" enabled="true"
type=
"Microsoft.ApplicationBlocks.SmartClient.Offline.WinINetDetectionStrategy, Microsoft.ApplicationBlocks.SmartClient.Offline.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
<pollingInterval2</pollingInterval
</provider
</ConnectionManagerProviders
...
表 4.2 按照 ConnectionManagerProviders 特性在配置文件中的显示顺序说明它们的设置。
表4.2:ConnectionManagerProviders 特性的默认设置
Offline Application Block 提供了 ConnectionDetectionStratergy,后者使用 Windows API WinINetDetectionStrategy 类来检测与网络的连接性。
QueueManagerProviders
下列提供程序可用于队列存储:
• InMemoryQueueStorageProvider ? 该提供程序将队列数据存储在内存数据结构中。因为当应用程序关闭时存储的数据会丢失,所以该提供程序不适于存储持久性数据。
• MSDEQueueStorageProvider ? 该提供程序将队列数据存储在“桌面引擎”中。自定义属性 ConnectionString 定义了用于连接到 MSDE 数据库的连接字符串。
• MSMQQueueStorageProvider ? 该提供程序将队列数据存储在“消息队列”中。该提供程序允许在配置文件中指定消息队列的名称,并且它将尝试打开具有该名称的队列。如果它无法打开该队列,就会尝试以给定的名称创建一个专用队列。在部署基于该块的应用程序的过程中,您应通过管理手段(使用 Microsoft 管理控制台 [MMC] 单元)手动创建消息队列,以便其安全权限能够正确配置。请注意,该块假设所使用的消息队列是专用队列。自定义属性 queueName 定义该队列的名称。
• IsolatedStorageQueueStorageProvider ? 该提供程序存储一个用户的队列数据,并防止其他用户对该数据进行访问。
以下配置文件摘录显示了 QueueManagerProviders 区段是如何在 App.config 文件中定义的:
...
<configuration
<configSections
<section name="QueueManagerProviders" type="Microsoft.ApplicationBlocks.SmartClient.Offline.MultiProviderConfigHandler,Microsoft.ApplicationBlocks.SmartClient.Offline,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" /
</configSections
</configuration
以下配置文件摘录显示了 QueueManagerProviders 区段的详细内容:
...
<QueueManagerProviders
<provider name="queueManagerStorageProvider"
enabled="false"
type="Microsoft.ApplicationBlocks.SmartClient.Offline.IsolatedStorageQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
encrypted="false"
signed="false"
cryptoProvider="default" /
<provider name="queueManagerStorageProvider"
enabled="true"
type="Microsoft.ApplicationBlocks.SmartClient.Offline.InMemoryQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
encrypted="false"
signed="false"
cryptoProvider="default"/
<provider name="queueManagerStorageProvider"
enabled="false"
type="Microsoft.ApplicationBlocks.SmartClient.Offline.MSMQQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
encrypted="false"
signed="false"
cryptoProvider="default"
<queueNameInsuranceClaimsClientQueue</queueName
</provider
<provider name="queueManagerStorageProvider"
enabled="false"
type="Microsoft.ApplicationBlocks.SmartClient.Offline.MSDEQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
encrypted="false"
signed="false"
cryptoProvider="default"
<applicationNameInsurance Claims Client</applicationName
<connectionStringInitial Catalog=QueueDatabase;Data Source=[MsdeServerName]\[MsdeInstanceName];Integrated security=true</connectionString
</provider
</QueueManagerProviders
...
表 4.3 按照 QueueManagerProviders 特性在配置文件中的显示顺序说明它们的设置。
表 4.3:QueueManagerProviders 特性的默认设置
cryptoProvider 特性将在下面的“加密设置”部分中进行更全面地讨论。
CryptographicSettings
配置文件中队列存储提供程序的每个提供程序节点都具有一个与之关联的 cryptoProvider 特性,该特性指定要使用的 cryptoProvider。配置文件中还有另一个名为 crytpographicSettings 的区段,其中可以定义许多不同的加密提供程序,实现不同的加密算法和公钥。每个加密提供程序都由一个名称标识,并且每个 QueueStorageProviders 元素中的 cryptoProvider 特性标识要用于该 QueueStorageProvider 的加密提供程序。
要点 经常更改密钥以防止恶意访问、或未经授权的用户获得对该密钥的访问权以及通向您网络的非法入口是非常重要的。