在业务流程管理解决方案中高效使用 SSO

与面向服务的解决方案类似,业务流程管理解决方案使用企业单一登录 (SSO) 来存储配置值,例如订单处理阶段数。 由于只要安装 BizTalk 就会存在密钥存储区,因此该解决方案将使用密钥存储区;SSO 将缓存配置信息以便随时可以使用这些值,并且可以保护诸如数据库连接字符串和密码之类的信息。 由于上述这些原因,因此密钥存储区是配置信息的适当位置,即使不将单一登录用于管理指向后端应用程序的连接。

为缩短延迟时间,该解决方案使用本地缓存来存储配置值。 该解决方案每隔五分钟刷新一次缓存。

本主题将介绍该解决方案使用的缓存机制。 此解决方案采用的 SSO 缓存方法与面向服务的解决方案采用的方法略有不同。 有关面向服务的解决方案如何缓存 SSO 值的说明,请参阅 在面向服务的解决方案中高效使用 SSO

在本地缓存配置值

业务流程管理解决方案使用单一对象的属性来提供对 SSO 值的访问。

注意

请注意,单一对象是只能具有一个实例的对象。 有关单一实例对象以及使用 C# 创建它们的详细信息,请参阅 在 C# 中实现单一实例

在解决方案中,业务流程首先检索单一实例对象,然后通过对象的属性引用值。 下面是 OrderManager 业务流程中的代码:

configData = Microsoft.Samples.BizTalk.SouthridgeVideo.Utilities
                .SsoConfigHelper.Singleton;
numStages = configData.TotalStages;

业务流程调用 SsoConfigHelper 对象上的 Singleton 方法,以获取对对象的一个副本的访问权限。 有了 对象,业务流程将检索处理阶段的数目 ,即 TotalStages

该解决方案遵循创建单一实例的常用方法:使构造函数成为私有的,让 对象创建自己的实例并将其分配给私有变量,并通过方法或属性提供对该变量的值的访问权限。 SsoConfigHelper 对象使用属性 Singleton 来提供对自身单一副本的访问权限。

注意

SsoConfigHelper 对象使用静态构造函数从 SSO 缓存获取初始值并设置刷新机制。 由于无法调用静态构造函数,因此该函数将保留单一设计。 有关详细信息,请参阅 静态构造函数 (C# 编程指南)

业务流程引用(无论是直接还是间接引用)的所有对象都必须是可序列化的。 有关详细信息,请参阅 持久性和业务流程引擎中的“序列化”。 尽管 SsoConfigHelper 对象必须可序列化,但如果引擎解除业务流程的冻结,当业务流程解除冻结时,它仍将使用对象的单个当前实例。 有关序列化和BizTalk Server变量的详细信息,请参阅业务流程变量类型

注意

面向服务的解决方案中的对象上的所有公共方法都是静态的。 因此,该业务流程不需要向变量分配实例,也不需要对类进行序列化。

SsoConfigHelper 对象使用与面向服务的解决方案相同的机制来检索和刷新配置值。 也使用相同的锁定模式。 有关这些机制的详细信息,请参阅 在面向服务的解决方案中高效使用 SSOSsoConfigHelper 的源代码。

与在面向服务的解决方案中执行的单个 Sign-On 缓存一样,业务流程管理解决方案通过 Microsoft.BizTalk.SSOClient.Interop 命名空间实现 IPropertyBag 接口来存储值。 业务流程管理解决方案使用 HybridDictionary 对象,而不是 NameValueCollection 对象。

与面向服务的解决方案不同,业务流程管理解决方案公开了一个具有对应于配置数据的属性的对象。 这样,业务流程就不必处理消息类型之间的差异。

另请参阅

业务流程管理解决方案的实施重点