65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 查询通知与 BizTalk Server 2009 WCF SQL 适配器

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2010 年 4 月 13 日

CPOL

6分钟阅读

viewsIcon

28783

SQL Server 查询通知与 BizTalk Server 2009 WCF SQL 适配器

引言

SQL Server 2005 引入了查询通知功能,该功能允许应用程序订阅数据库,并根据应用程序订阅的查询结果集的变化从数据库接收通知。这可以改变应用程序的行为和性能,因为应用程序不必查询数据库即可获取更改。例如,如果一个服务/应用程序缓存了数据,它可以在缓存数据结果发生变化时刷新其缓存。这样,就可以高效且实时地刷新数据。

关于 BizTalk,以前我们只使用轮询(使用 SQL Server 适配器)来从数据库获取结果。轮询是一项繁重的操作,取决于轮询间隔和返回的结果,这将影响 BizTalk 服务器的整体性能。但现在,通过利用 SQL Server 2005/2008 的查询通知功能,BizTalk 服务器可以在查询结果集发生更改时收到通知。要进一步阅读,您可以阅读 MSDN 上的 使用查询通知。在计划使用 WCF 适配器通过 SQL 查询通知之前,请先阅读 MSDN 上的 使用适配器接收查询通知的注意事项

从“消耗适配器服务”向导生成架构

要在 BizTalk 中使用查询通知,第一步是使用 **消耗适配器服务** 向导生成架构。您可以通过右键单击项目 -> 添加生成项 -> 消耗适配器服务来启动向导。要使用 SQL WCF 服务,您必须从向导中选择 sqlBinding 并提供 SQL URI。请参考 MSDN 上的 SQL Server 连接 URI。单击配置按钮并配置 mssql URI。

  1. 在“安全性”选项卡中,选择凭据类型(Windows/用户名),如果使用 SQL 身份验证,则提供用户名/密码。
  2. 在 URI 选项卡中,提供 URI 属性。在 InitialCatalog 属性中提供数据库名称,在 Server 属性中提供 SQL Server 实例名称和 SQL 服务器名称/IP。入站 ID 用于类型化轮询,它使 URI 唯一。
  3. Binding 属性中,转到 Inbound 属性组,并将 InboundOperationType 属性设置为 Notification。有关完整的绑定属性,请参阅 MSDN 上的 使用 BizTalk SQL Server 适配器绑定属性

    ConsumeAdapterService-ConfigureAdapter.png

  4. 由于您正在使用轮询并将入站操作类型设置为 Notification,因此您将设置 Notification 属性,其中指定了 Notification Statement。Notification Statement 是适配器接收通知的查询。每当查询返回的结果集发生更改时,就会发送 SQL 通知。有关创建查询通知的完整参考,请参阅 MSDN 上的 创建通知查询。在我的例子中,查询是“**Select [columns] from MAR_SP_INFO_V2**”。

    ConsumeAdapterService.png

    最后,将生成两个文件。一个是下面所示的带有三个字段的简单架构,另一个是绑定文件 XML。

    Notification_Schema.png

为查询通知和处理结果设置编排

当编排收到通知时,编排必须确定通知的类型,因为 WCF 适配器将返回两种类型的通知:

  1. 基于结果集变化的通知
  2. 接收位置在失败后启用时的通知

NotifyOnListenerStart 在绑定属性中设置为 true 时,适配器将在接收位置再次备份时发送通知。但请注意,当接收位置处于关闭状态且数据库发生变化时,适配器不会执行任何操作。适配器将在接收位置再次启动后开始通知。例如,当接收位置关闭并且插入和更新了几个记录时,当它再次启动时,它不会通知发生了什么。编排必须有一个检测变化的实现。为此,您可以阅读 MSDN 上的 接收接收位置中断后的查询通知

从向导生成的架构将有三个字段:InfoSourceType。在编排中,第一步是使用一个决定形状来决定编排收到了哪种类型的通知。我决定区分所有这三个字段,以便在我的编排中使用它们。如果您不这样做,可以使用 XPath 来提取字段的值。

在决定形状中,首先检查 Info 字段和 Source。如果 Info 是“ListenerStarted”,Source 是“SqlBinding”,Type 是“Startup”,您可以继续执行检测接收位置关闭期间数据库变化的逻辑。如果 Info 是“Insert/Update Delete”操作,Source 将是“Data”,Type 将是“Change”。

字段 数据库中的数据更改时 侦听器启动时(接收位置已启用)
Info(信息) 插入/更新或删除 ListenerStarted
来源 Data SqlBinding
类型 更改 启动

在我的编排中,对于接收侦听器启动通知或更新和删除,我什么也不做,我只对表中 insert 操作采取行动感兴趣。因此,我在决定形状中对此进行检查。我将设计某种机制来检查我的接收位置是否在关闭后重新启动,我该怎么办。

decide_exp.png

现在,我需要获取插入的新记录并进行处理。我正在使用 WCF SQL 适配器,并选择 StatusRecord 字段设置为 NEW 的所有记录。NEW 是新插入记录的默认值,以便我识别记录。我将在我的下一篇文章中详细介绍我如何使用 WCF SQL 适配器选择记录。当我选择记录并完成处理后,我会将 StatusRecord 列更新为 READ

Orchestration_Full.png

我将整个 select 消息响应传递给我的助手类,在那里完成所有处理,如果操作成功,我将记录结果。

配置 WCF 自定义适配器属性以进行通知

这里有两种配置适配器属性的方法,第一种是您可以在此处重新定义属性,或者您可以直接从 WCF 适配器服务向导生成的绑定文件中导入属性。为此,您可以参考 MSDN 上的 使用端口绑定文件配置物理端口绑定。我还没有研究过,但会在需要时使用。

我将为 WCF 自定义适配器进行手动绑定。完成编排后,您必须构建并部署 BizTalk 应用程序。然后从 BizTalk 管理控制台打开接收端口节点并创建一个新的接收端口。然后创建一个新的接收位置。将类型选择为 WCF-Custom,并使用默认的 XML 接收管道。单击配置按钮来配置适配器属性。

在“常规”选项卡中,指定地址 URI。您可以将其从“消耗适配器服务”向导生成的绑定文件中复制粘贴。

WCF-Custom-Adapter-General.png

在“其他”选项卡中,指定数据库的用户名和密码。否则,您将收到用户凭据错误。

WCF-Custom-Adapter-username.png

现在对于绑定属性,转到“绑定”选项卡,选择 sqlBinding 作为绑定类型。您将在下面看到所有绑定属性。我们只对通知绑定属性感兴趣。将 inboundOperationType 设置为 Notification,将 notificationStatement 属性设置为 SQL 查询。基于此查询结果集,将向编排发送通知。并将 notifyOnListenerStart 属性设置为 True,如果您希望在接收位置启用时收到通知。在我的例子中,它是 false。

Adapter_Config.png

历史

  • 2010 年 4 月 13 日:初稿
© . All rights reserved.