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

与面向服务的解决方案一样,业务流程管理解决方案使用企业单一 Sign-On(SSO)来存储配置值,例如订单处理阶段数。 它使用机密存储,因为它在安装 BizTalk 时存在,SSO 会缓存配置信息,以便这些值随时可用,并且可以保护数据库连接字符串和密码等信息。 出于所有这些原因,即使不使用单 Sign-On 来管理与后端应用程序的连接,秘密存储也是保存配置信息的好地方。

为了降低延迟,解决方案对配置值使用本地缓存。 解决方案每隔五分钟刷新一次缓存。

本主题介绍解决方案使用的缓存机制。 此解决方案采用的 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 对象使用与面向服务的解决方案相同的机制来检索和刷新配置值。 也使用相同的锁定模式。 有关这些机制的详细信息,请参阅 面向服务的解决方案中的 SSO 有效使用 ,以及 SsoConfigHelper 的源代码。

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

与面向服务的解决方案不同,业务流程管理解决方案公开一个对象,该对象具有与配置数据对应的属性。 这可以防止编排系统处理信息类型的不同。

另请参阅

业务流程管理解决方案的实现亮点