`
pcajax
  • 浏览: 2158774 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

BizTalk 开发系列(四十) BizTalk WCF-SQL Adapter读取SQL Service Broker消息

阅读更多

 

SQL Service Broker 是在SQL Server 2005中新增的功能。Service Broker 为 SQL Server 提供队列和可靠的消息传递,可以可用来建立以异步消息为基础的应用。当然从题目大家可能也看出来了。我们本文主要不是为了讲SQL Service Broker(SSB),而是讲一下如何使用BizTalk WCF-SQL Adapter来访问SSB的数据。

 

SQL Service Broker(SSB)

为要便于大家更好的接下来的示例,我们还是概况的讲一下SSB的相关知识。更详细的背景信息大家可以在Service Broker开发人员信息中心中了解到。

SQL Service Broker实现的功能有点类似于咱们已经很熟悉的MSMQ,但它是在数据库实现消息队列这样的功能。Service Broker 可以帮助开发人员生成可伸缩的、安全的数据库应用程序。此项技术是数据库引擎的一部分,它提供一个基于消息的通信平台,使独立的应用程序组件可以作为一个整体来运行。Service Broker 包含用于异步编程的基础结构,可用于单个数据库或单个实例中的应用程序,也可用于分布式应用程序。

Service Broker 提供了生成分布式应用程序所需的大部分基础结构,从而减少了应用程序的开发时间。利用 Service Broker 还可以轻松缩放应用程序,以容纳应用程序接收的通信流量。

 

WCF-SQL Adapter

WCF-SQL Adapter是BizTalk Server 2009中新增的用于替换之前使用的SQL Adapter。WCF-SQL中新增了对于SQL Server新的数据类型、事件通知等的运行。以下是WCF-SQL中相对于之前SQL Adapter的功能比较:

功能

SQL Adapter

WCF SQL Adapter

在表和视图上执行创建、读取、更新和删除语句 ;执行存储过程和生成T-SQL语句

Execute create-read-update-delete statements on tables and views; execute stored procedures and generic T-SQL statements

部分支持(发送部分仅支持存储过程和updategrams

Yes

通过FOR XML实现数据轮询

Database polling via FOR XML

Yes

Yes

通过表格实现数据轮询(不添加 FOR XML)

Database polling via  traditional tabular results

No

Yes

通过SQL查询通知实现数据库推送

Proactive database push via SQL Query Notification

No

Yes

通过扩展适配器配置去更改连接机制和行为

Expansive adapter configuration which impacts connection management and transaction behavior

No

Yes

支持多个事务,即允许将多个表和存储过程的操作放到一个原子事务中。

Support for composite transactions which allow aggregation of operations across tables or procedures into a single atomic transaction

No

Yes

丰富的数据浏览和检索找到并选择数据库操作

Rich metadata browsing and retrieval for finding and selecting database operations

No

Yes

支持最新的数据类型如XML和SQL Server 2008平台

Support for the latest data types (e.g. XML) and SQL Server 2008 platform

No

Yes

可以被BizTalk 应用程序之外的WCF或HTTP客户端重用。

Reusable outside of BizTalk applications by WCF or basic HTTP clients

No

Yes

通过WCF特有的组件和自定义WCF行为扩展适配器和配置

Adapter extension and configuration through out of the box WCF components or custom WCF behaviors

No

Yes

动态生成WSDL,实时反映当前系统状态替代固定的契约需要明确的更新。

Dynamic WSDL generation which always reflects current state of the system instead of fixed contract which always requires explicit updates

No

Yes

 

BizTalk WCF-SQL Adapter读取SQL Service Broker消息

OK, 上面讲的都是微软自家的东西。当然自家的东西兼容性要好一点。那么本节的标题其实我是故意加了一个“BizTalk”的,因为微软自从看到Adapter的价值之后就开始将Adapter Pack拆分出来卖。也就是说你也可以不购买BizTalk而是单独购买Adapter Pack通过自已开发的应用程序来访问SAP、Oracle、SQL Server等业务系统。

转到正题,以下我们将来具体讲一下演示的步骤,为了简化BizTalk程序我们将不使用Orchestration。

1.创建SSB应用

在以下操作中我们将创建数据库,创建Service Broker的消息、队列、服务、契约等。

 

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->USE master;
GO 

CREATE DATABASE CBCYE_SSB 

ALTER DATABASE CBCYE_SSB
    
SET ENABLE_BROKER;
GO
USE CBCYE_SSB;
GO 

CREATE MESSAGE TYPE
    
[//CBCYE_SSBSample/RequestMessage]
    VALIDATION 
= WELL_FORMED_XML; 

CREATE CONTRACT [//CBCYE_SSBSample/SampleContract]
    (
[//CBCYE_SSBSample/RequestMessage]
    SENT 
BY INITIATOR
    ); 
CREATE QUEUE InitiatorQueue1DB; 

CREATE SERVICE
    
[//CBCYE_SSBSample/InitiatorService]
    
ON QUEUE InitiatorQueue1DB; 

CREATE QUEUE TargetQueue1DB; 

CREATE SERVICE
    
[//CBCYE_SSBSample/TargetService]
    
ON QUEUE TargetQueue1DB
    (
[//CBCYE_SSBSample/SampleContract]); 

 

2.BizTalk接收端口和位置

新建一个BizTalk应用程序的端口和位置。在端口类型中选择WCF-SQL,如果未针对WCF-SQL创建独立的适配器可以选择WCF-Customer,接收管道全部选择PassThruReceive。然后在Binding中选择sqlbinding。在端口地址中输入:mssql://localhost//CBCYE_SSB

打开Binding配置页,Inbound轮询的配置项中:

image

如上图所示,设置PooledDataAvailableStatement的值为:SELECT COUNT(*) FROM TargetQueue1DB WITH (NOLOCK) //设置晌应条件

设置PoolingIntervallnSeconds的值为:2 //设置轮询间隔时间

设置PollingStatement的值为: //设置执行脚本

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE @DlgHandle UNIQUEIDENTIFIER;
DECLARE @RecvMsg XML;
RECEIVE 
TOP (1
@DlgHandle=conversation_handle, 
@RecvMsg = CAST(message_body as XML) 
FROM TargetQueue1DB;
IF NOT (@DlgHandle IS NULL
BEGIN
END CONVERSATION @DlgHandle
SELECT @RecvMsg AS ReceivedMessage;
END

 设置完之后,需要创建一个发送端口用于订阅来自接收端口的消息。并将消息的内容以文件的形式发往文件夹。

 

3.发送消息到目标队列

在SQL Management Studio的查询中输入以下脚本,将消息发往目标队列

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE @RequestMsg XML;
SELECT @RequestMsg = N'<CBCYEMsg>Hello, World</CBCYEMsg>';
DECLARE @DlgHandle UNIQUEIDENTIFIER;
BEGIN DIALOG @DlgHandle
FROM SERVICE
[//CBCYE_SSBSample/InitiatorService]
TO SERVICE
N
'//CBCYE_SSBSample/TargetService'
ON CONTRACT
[//CBCYE_SSBSample/SampleContract]
WITH ENCRYPTION = OFF;
SEND 
ON CONVERSATION @DlgHandle
MESSAGE TYPE 
[//CBCYE_SSBSample/RequestMessage]
(
@RequestMsg);

 

4.修改配置以接收到实际发送的消息

打开目标文件夹,你可能会发现接收到的消息并不是之前发送的消息内容,而是一个完整的DataSet的XML消息。


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><Polling xmlns="http://schemas.microsoft.com/Sql/2008/05/Polling/%22><PolledData><DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data%22><xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema%22 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element msdata:IsDataSet="true" name="NewDataSet"><xs:complexType><xs:sequence><xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="ReceivedMessage" type="xs:string"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><NewDataSet xmlns=""><NewTable><ReceivedMessage><![CDATA[<CBCYEMsg>Hello, World</CBCYEMsg>]]></ReceivedMessage></NewTable></NewDataSet></diffgr:diffgram></DataSet></PolledData></Polling> 

那么我们需要告诉WCF-SQL适配器,消息内容的路径。打开WCF-SQL的配置,

image

在Messaging项中选择path,在表达式中输入:/*[local-name()='Polling']/*[local-name()='PolledData']/*[local-name()='DataSet']/*[local-name()='diffgram']/*[local-name()='NewDataSet']/*[local-name()='NewTable']/*[local-name()='ReceivedMessage']

在编码中选择String。

最后,再次发送消息到目标队列中。我们就可以在输出文件夹中查看到我们发送的消息:

 

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><CBCYEMsg>Hello, World</CBCYEMsg> 

 

总结

SQL Service Broker作为在SQL Server实现的异步消息应用基础。BizTalk提供了比较好的支持,对于这两种技术的更多、更价值的应用,可能还需要业务人员和开发人员在不断的尝试中才能知道。

分享到:
评论

相关推荐

    Microsoft BizTalk Server 2010 Patterns

    WCF-SQL Adapter, as well as how to expose WCF services from BizTalk. The user will learn both polling and query approaches to working with the WCF-SQL Adapter and how to expose different services in ...

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

    本主题将深入探讨BizTalk Server 2009中的WCF SQL适配器以及如何利用它来实现SQL Server查询通知。这些功能极大地增强了 BizTalk 与数据库交互的能力,使得实时数据更新成为可能。 WCF SQL适配器是BizTalk Server中...

    BizTalk开发系列一“HelloWorld”.pdf

    BizTalk是微软推出的一款企业服务总线(Enterprise Service Bus,简称ESB)产品,用于帮助实现企业内部或跨企业的应用程序集成。本文将围绕BizTalk的基础入门操作,以“HelloWorld”为示例进行讲解。 首先,BizTalk...

    BizTalk开发系列(1-40).docx

    这个开发系列的文档很可能是逐步介绍如何使用 BizTalk Server 进行开发和配置的一系列教程。在这个“Hello World”入门教程中,我们将探讨BizTalk Server的基础知识,以及如何通过管理控制台创建一个简单的应用程序...

    调用Biztalk发布的web service演示

    7. **BizTalk Adapter Framework**:BizTalk Server包含一组适配器,可以与各种系统集成,如SQL Server、FTP服务器、SMTP服务器等。这使得 BizTalk 发布的Web服务能够轻松地与这些系统交互。 总之,BizTalk Server ...

    Biztalk 2010获取sql server 2008数据并用web服务发布

    SQL适配器是BizTalk Server提供的一个关键组件,它使得BizTalk能够与SQL Server数据库进行交互,包括读取、写入和更新数据。在 BizTalk 2010 中,我们可以通过配置接收位置和发送端口来设置SQL适配器,从而实现对SQL...

    BizTalk Server 2006 Installation Guide - Windows XP

    BizTalk Server 2006 是一款由微软开发的企业级业务集成服务器,它允许组织通过标准化的消息传递机制来连接不同的应用程序、系统和服务。BizTalk Server 2006 提供了多种组件,包括: - **消息传递引擎**:用于接收...

    Microsoft Biztalk 学习 70-595 考证 必备 电子书 E book 有随书代码

    1. **BizTalk Server概述**:了解BizTalk Server的基本架构,包括BizTalk Server如何处理消息、Orchestrations(工作流)、Adapters(适配器)以及Enterprise Service Bus (ESB)工具包的作用。 2. **BizTalk Server...

    MCTS-WCF 70-503

    - **业务流程集成**:通过示例展示如何将WCF服务与BizTalk Server等其他企业服务集成。 - **性能优化**:提供技巧和最佳实践,帮助提高WCF服务的性能和效率。 - **跨平台通信**:探索WCF支持的不同通信协议,如HTTP...

    BizTalk应用开发指南

    《BizTalk应用开发指南》 BizTalk Server是由微软提供的一个强大的业务流程管理和企业应用集成平台,它充分利用了面向服务的架构(SOA)模式,将复杂的业务流程、应用程序接口和贸易伙伴交互转化为有序的消息传递、...

    BizTalk 2004 教程

    四、BizTalk Adapter Pack BizTalk Adapter Pack提供了与多种第三方系统的接口,使得BizTalk可以无缝集成到现有的IT环境中。例如,你可以使用SQL Server适配器进行数据库交互,使用WCF适配器与Web服务进行通信。 五...

    SQLserver 2016 Alwayson ,windows server 2016 群集 ,biztalk 2013 配置

    根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍如何配置Windows Server 2016集群结合SQL Server 2016 AlwaysOn功能,并集成BizTalk Server 2013来构建一个高可用性与容错性的企业级集成解决方案。...

    sap与外部系统集成_Biztalk Server Adapter park for mysap

    - **Console application开发**:使用.NET Data Provider for SAP执行表选择操作,或者利用WCF LOB Adapter执行RFC/BAPI调用。 - **ASP .NET Web application开发**:同样支持表选择和RFC/BAPI调用,但适用于Web...

    BizTalk 应用开发指南

    企业应用程序集成、工作流程自动化、架构、面向服务的架构、SOA、.NET、Visual Studio .NET、 BizTalk Server、 XML、XML Schema、Web服务、人员工作流服务、HWS、工作流

    01_BizTalk_入门.zip

    例如,你可以学习如何使用 FTP 适配器接收外部系统的文件,通过BizTalk 解析文件内容,再将数据插入到SQL Server数据库中,或者如何使用WCF适配器与SOAP Web服务进行交互。 通过这个“01_BizTalk_入门”教程,你...

    biztalk for oracle adapter samples

    《BizTalk 2006(r2)与Oracle适配器的应用实例解析》 BizTalk Server 2006 R2是一款由微软推出的强大的企业级集成平台,它提供了丰富的工具和功能,使得企业系统间的通信变得更为高效和便捷。在众多的适配器中,...

    Biztalk Server 2009 视频3

    - **BizTalk Adapter Framework**:提供一系列适配器,支持与多种系统(如数据库、ERP、Web 服务等)的连接。 - **Business Activity Monitoring (BAM)**:实时监控业务流程性能,提供关键业务指标的可视化分析。 ...

    Biztalk Server 2009 视频4

    2. **适配器技术**:BizTalk Server 包含一系列预建的适配器,用于与各种系统和协议进行通信,例如SQL Server、FTP、SMTP、HTTP、WCF等。这使得BizTalk能轻松集成内部和外部系统。 3. **消息引擎**:BizTalk 的消息...

Global site tag (gtag.js) - Google Analytics