`
pcajax
  • 浏览: 2184659 次
  • 性别: 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提供了比较好的支持,对于这两种技术的更多、更价值的应用,可能还需要业务人员和开发人员在不断的尝试中才能知道。

分享到:
评论

相关推荐

    Biztalk Server 2009 视频3

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

    了解 BizTalk Server 2006

    3. **Adapters**:BizTalk 提供了一系列预建的适配器,如SQL Server、FTP、SMTP、WCF等,用于与各种系统进行通信。此外,用户还可以自定义适配器以满足特定的需求。 4. **Message Broker**:BizTalk 的消息引擎负责...

    面向对象软件体系结构SOA.pdf

    - **Microsoft** 的BizTalk Server和Windows Communication Foundation(WCF)为.NET开发者提供了构建SOA的能力。 4. **SOA应用实例** - 在企业资源规划(ERP)、供应链管理(SCM)和客户关系管理(CRM)系统中,...

    TinyYolo2实时视频流物体检测ONNX模型

    TinyYolo2实时视频流物体检测ONNX模型 运行 ONNX 模型,并结合 OpenCV 进行图像处理。具体流程包括: 1. 加载并初始化 ONNX 模型。 2. 从摄像头捕获实时视频流。 3. 对每一帧图像进行模型推理,生成物体检测结果。 4. 在界面上绘制检测结果的边界框和标签。

    chromedriver-linux64-134.0.6998.23(Beta).zip

    chromedriver-linux64-134.0.6998.23(Beta).zip

    Web开发:ABP框架4-DDD四层架构的详解

    Web开发:ABP框架4-DDD四层架构的详解

    chromedriver-linux64-135.0.7029.0(Canary).zip

    chromedriver-linux64-135.0.7029.0(Canary).zip

    (参考项目)MATLAB人脸门禁系统.zip

    实现人脸识别的考勤门禁系统可以分为以下步骤: 1. 采集人脸图像数据集:首先需要采集员工的人脸图像数据集,包括正面、侧面等多个角度的图像。可以使用MATLAB中的图像采集工具或者第三方库进行采集。 2. 预处理人脸图像数据:对采集到的人脸图像数据进行预处理,包括人脸检测、人脸对齐、人脸裁剪等操作。MATLAB提供了相关的图像处理工具箱,可以用于实现这些处理步骤。 3. 特征提取与特征匹配:使用人脸识别算法提取人脸图像的特征,比如使用人脸识别中常用的特征提取算法如Eigenfaces、Fisherfaces或者基于深度学习的算法。然后将员工的人脸数据与数据库中的人脸数据进行匹配,判断是否为注册员工。 4. 考勤记录与门禁控制:如果人脸匹配成功,系统可以记录员工的考勤时间,并且控制门禁系统进行开启。MATLAB可以与外部设备进行通信,实现门禁控制以及考勤记录功能。

    rdtyfv、ijij

    yugy

    企业IT治理体系规划.pptx

    企业IT治理体系规划.pptx

    基于Nutz、SSH、SSM的新闻管理系统.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,MATLAB代码:基于多目标粒子群算法冷热电联供综合能源系统运行

    基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,MATLAB代码:基于多目标粒子群算法冷热电联供综合能源系统运行优化 关键词:综合能源 冷热电三联供 粒子群算法 多目标优化 参考文档:《基于多目标算法的冷热电联供型综合能源系统运行优化》 仿真平台:MATLAB 平台采用粒子群实现求解 优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:代码构建了含冷、热、电负荷的冷热电联供型综合能源系统优化调度模型,考虑了燃气轮机、电制冷机、锅炉以及风光机组等资源,并且考虑与上级电网的购电交易,综合考虑了用户购电购热冷量的成本、CCHP收益以及成本等各种因素,从而实现CCHP系统的经济运行,求解采用的是MOPSO算法(多目标粒子群算法),求解效果极佳,具体可以看图 ,核心关键词: 综合能源系统; 冷热电三联供; 粒子群算法; 多目标优化; MOPSO算法; 优化调度模型; 燃气轮机; 电制冷机; 锅炉; 风光机组; 上级电网购售电交易。,基于多目标粒子群算法的CCHP综合

    DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发串口通信方案,DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发实现串口通信,DSP28379D串口升

    DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发串口通信方案,DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发实现串口通信,DSP28379D串口升级方案 单核双核升级,boot升级,串口方案。 上位机用c#开发。 ,DSP28379D; 串口升级方案; 单核双核升级; boot升级; 上位机C#开发,DSP28379D串口双核升级方案:Boot串口升级技术使用C#上位机开发

    基于ASP.NET MVC+三层架构和EntityFramework的微博门户网站项目.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于PLC的双层自动门控制:光电传感触发,有序开关与延时功能实现,附程序、画面及参考文档 ,基于PLC的双层自动门控制系统:精准控制,保障无尘环境;门间联动,智能安防新体验 ,基于plc的双层自动门控

    基于PLC的双层自动门控制:光电传感触发,有序开关与延时功能实现,附程序、画面及参考文档。,基于PLC的双层自动门控制系统:精准控制,保障无尘环境;门间联动,智能安防新体验。,基于plc的双层自动门控制系统,全部采用博途仿真完成,提供程序,画面,参考文档,详情见图。 实现功能(详见上方演示视频): ① 某房间要求尽可能地保持无尘,在通道上设置了两道电动门,门1和门2,可通过光电传感器自动完成门的打开和关闭。 门1和门2 不能同时打开。 ② 第 1 道门(根据出入方向不同,可能是门 1 或门 2),是由在通道外的开门者通过按开门按钮打开的,而第 2 道门(根据出入方向不同,可能是门 1 或门 2 )则是在打开的第 1 道门关闭后自动地打开的(也可以由通道内的人按开门按钮来打开第2 道门)。 这两道门都是在门开后,经过 3s 的延时而自动关闭的。 ③ 在门关闭期间,如果对应的光电传感器的信号被遮断,则门立即自动打开。 如果在门外或者在门内的开门者按对应的开门按钮时,立即打开。 ④ 出于安全方面的考虑,如果在通道内的某个人经过光电传感器时,对应的门已经打开,则通道外的开门者可以不按开门按钮。

    黑马程序员Java品达通用权限项目,基于SpringCloud SpringBoot 的微服务框架的权限管理解决方案.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    DeepSeek+DeepResearch-让科研像聊天一样简单

    DeepSeek+DeepResearch——让科研像聊天一样简单 (1)DeepSeek如何做数据分析? (2)DeepSeek如何分析文件内容? (3)DeepSeek如何进行数据挖掘? (4)DeepSeek如何进行科学研究? (5)DeepSeek如何写综述? (6)DeepSeek如何进行数据可视化? (7)DeepSeek如何写作润色? (8)DeepSeek如何中英文互译? (9)DeepSeek如何做降重? (10)DeepSeek论文参考文献指令 (11)DeepSeek基础知识。

    基于springboot+uniapp实现的蛋糕商城小程序.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    jdepend-demo-2.9.1-10.el7.x64-86.rpm.tar.gz

    1、文件内容:jdepend-demo-2.9.1-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/jdepend-demo-2.9.1-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    关爱儿童公益网站 web 项目.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

Global site tag (gtag.js) - Google Analytics