Welcome to MSDN Blogs Sign in | Join | Help

WCF LOB Adapter SDK and BizTalk Adapter Pack

The BizTalk Adapter Pack, comprising of the SAP, Siebel, OracleDB, OracleEBS and SQL WCF Bindings / Adapters which can be used with BizTalk Server 2006 R2 and R3. The Windows Communication Foundation (WCF) Line Of Business (LOB) Adapter SDK.

Syndication

News

CTP4 released (Adapter Pack V2, Adapter SDK V1 SP2) on October 21, 2008

Other Blogs Related to BizTalk Adapter Pack

Using the WCF SQL Adapter to submit messages to SSB queues from BizTalk

This post is a follow-up to http://blogs.msdn.com/adapters/archive/2008/06/30/using-the-wcf-sql-adapter-to-read-messages-from-ssb-queues-and-submit-them-to-biztalk.aspx and explains how to push a message using the WCF SQL Adapter from BizTalk to a SQL Service Broker (SSB) queue.

 

Scenario

 

1.       An XML message is dropped to a file share

2.       This XML message is made available to the WCF SQL Adapter by using the File Adapter

3.       The WCF SQL Adapter then pushes this XML message to a preconfigured SSB queue by invoking a Stored Procedure

 

Create the database artifacts required for the SSB conversation

 

1.       A message type, which denotes the format of the message in the queue

2.       A contract, which denotes the conversation between a sender and a receiver and also includes the type of message flowing between them

3.       The Initiator & Target queues, where messages are stored

4.       The Initiator & Target services, which utilize the above queues

 

USE master;

GO

ALTER DATABASE <your db name here>

    SET ENABLE_BROKER;

GO

USE <your db name here>;

GO

 

CREATE MESSAGE TYPE

    [//SqlAdapterSSBSample/RequestMessage]

    VALIDATION = WELL_FORMED_XML;

 

CREATE CONTRACT [//SqlAdapterSSBSample/SampleContract]

    ([//SqlAdapterSSBSample/RequestMessage]

    SENT BY INITIATOR

    );

 

CREATE QUEUE InitiatorQueue1DB;

 

CREATE SERVICE

    [//SqlAdapterSSBSample/InitiatorService]

    ON QUEUE InitiatorQueue1DB;

 

CREATE QUEUE TargetQueue1DB;

 

CREATE SERVICE

    [//SqlAdapterSSBSample/TargetService]

    ON QUEUE TargetQueue1DB

    ([//SqlAdapterSSBSample/SampleContract]);

 

5.       A stored procedure, say InitiatorSP, that will take the message as an argument and push it to the SSB queue. Let’s use the name RequestMsg for the argument.

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[InitiatorSP]

      @RequestMsg xml

AS

BEGIN

      DECLARE @DlgHandle UNIQUEIDENTIFIER;

      BEGIN DIALOG @DlgHandle

      FROM SERVICE

      [//SqlAdapterSSBSample/InitiatorService]

      TO SERVICE

      N'//SqlAdapterSSBSample/TargetService'

      ON CONTRACT

      [//SqlAdapterSSBSample/SampleContract]

      WITH ENCRYPTION = OFF;

      SEND ON CONVERSATION @DlgHandle

      MESSAGE TYPE

      [//SqlAdapterSSBSample/RequestMessage]

      (@RequestMsg);

END

GO

 

Create the BizTalk artifacts

 

1.       Start the BizTalk Server 2009 Administration Console

2.       Create a new BizTalk application, say SSBSendApplication

3.       Create a new Receive Port, say FileReceivePort and add a new Receive Location, say FileReceive

a.       Set the Type to File and configure the Receive Folder to point to a local share, say c:\in

4.       Create a new Static One-way Send Port, say SqlSendPort

a.       In the General tab,

                                                               i.      Set the Type to WCF-SQL

                                                             ii.      Click Configure and set the properties as follows

1.       In the General tab, set

a.       Address – the format is “mssql://<servername>/<instancename>/<databasename>”. For example, on my machine (using the default instance of SQL server), mssql://localhost//SSBTestDb (where SSBTestDb is the name of my database)

b.      Action – the format is “TypedProcedure/<schemaname>/<storedprocedurename>”. For example, in my case, it is TypedProcedure/dbo/InitiatorSP

2.       In the Messages tab, select Template and fill in the XML box with the following

 

<InitiatorSP xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">

<RequestMsg>

<bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="string"/>

</RequestMsg>

</InitiatorSP>

 

*Note that this approach requires that the xml encoding is string.

 

                                                            iii.      Leave the other properties as is

b.      In the Filters tab, add a filter BTS.ReceivePortName == FileReceivePort

5.       Create a new Static One-way Send Port, say FileSendPort

a.       In the General tab, set the Type to File and configure the Receive Folder to point to a local share, say c:\out

b.      In the Filters tab, add a filter BTS.SPName == SqlSendPort

6.       At this point the configuration of BizTalk application is completed, so start the application.

 

Send the message to SSB queue

 

1.       Drop a request file to the c:\in share (one that file receive port is using). Note that this exact message will show up in the SSB queue. Here’s a sample message

 

<RequestMessage>Hello World</RequestMessage>

 

Consume the message from SSB queue

 

1.       You can now consume the message from the SSB queue. On running the below query, you will see the above message.

 

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

Published Wednesday, October 07, 2009 5:11 AM by SandeepP

Filed under: , ,

Comments

No Comments

Anonymous comments are disabled
Page view tracker