ESB Toolkit How To Video #5: Including Custom Orchestrations in Itineraries

Update: Sorry folks, the first link I posted for the video was incorrect. I have updated it now:

Welcome to #5 in my series of ESB Toolkit How To Videos. If you have not seen the previous videos, I encourage you to do so. The previous ones can be found here

1) Basic Itinerary Routing and UDDI Integration

2) Composite Itinerary and Dynamic Mapping

3) Itinerary Resolution in the Bus

4) Dynamic Itinerary Resolution in the Bus

One of the great things about the ESB Toolkit is that it can be extended in a large number of ways. One of the common ways that developers will want to extend it, is to create custom BizTalk orchestrations that can be included within an ESB itinerary. With the default install of the Toolkit, you have access to two orchestration. The generic routing orch and the generic mapping orch. In this video, I’ll show you how to create a new orchestration and then register it with the ESB so that you can access it from the itinerary designer and create an itinerary that will route messages to it.

The video can be accessed here

Cheers and keep on BizTalking…

Peter

Litware Training sample Mashup app

We’ve all heard of a "mashup" because its one of those buzz words, like "Web 2.0", that is picked up and repeated over and over again by the journalists and analysts.  But have you actually seen one up close in the wild?  Or do you have suspicions that its an elusive beast or a myth like Big Foot or Nessie?  Well, we’ve got one of these critters in captivity for you to take home as a pet.  Play with it.  Get comfortable.  See what makes it tick.  See what tools from Microsoft are useful in building a mashup. And see if this programming style applies to something you want to do with your next application.

Litware Training is a sample "mashup" app built using ASP.NET and the WCF REST Starter Kit Preview 2. It demonstrates how to build a Web 2.0 application, tapping into popular search, geographic information, and social networking APIs on the internet. It shows how to consume and expose RESTful services.

Thanks to Ben Dewey of twentysix New York who built the sample.

BizUnit 3.1

BizUnit 3.1

BizUnit 3.1 is now released. (Actually its been out for over a week). There are a few bug fixes in this release and most notable is the addition of the following steps that Bram Veldhoen contributed.

BizTalkSteps/ExecuteMapStep
BizTalkSteps/ExecuteReceivePipelineStep
BizTalkSteps/ExecuteSendPipelineStep

The Pipeline steps use Tomas Restrepo’s Pipeline Testing Library.
I had originally planned on incorporating Bram’s steps into Extensions as I […]

EDI/AS2 in BizTalk 2009 : How to get the BatchId for a specific BatchName

One of the new features in BizTalk 2009 EDI is the possibility to create multiple batch configurations for each party.
Each batch will have a specific name and specific batchID and can be managed individually.


For a specific batch name you can get the corresponding batch ID. For example you may need this for an external trigger message for that batch.


If you want to do that programmatically, you may expect you can just call Partner.GetBatchIdForBatchName method by passing the batch name.
http://msdn.microsoft.com/en-us/library/microsoft.biztalk.edi.partneragreementmanager.partner.getbatchidforbatchname.aspx


But looking at the signature of that method, it is probably not what you want. Instead of expecting just a string for the batch name, this method wants two int, the partyID and the messageType. But if you just want to pass in the batch name, you do not get very far with that method.


To get the batch ID for a batch name, we have a stored procedure you can call from code: edi_GetBatchIdForBatchName .
Calling 
  exec edi_GetBatchIdForBatchName ‘MyBatch’
will return the ID of the batch name MyBatch.



Note: both calling GetBatchIdForBatchName and edi_GetBatchIdForBatchName directly is not supported.


 


Manuel Stern

BizTalk 2009 Performance Slides release by Microsoft BizTalk CAT Team

BizTalk 2009 Performance Slides release by Microsoft BizTalk CAT Team

Just saw on Ewan Fairweather’s blog that the BizTalk Server Customer Advisory Team have released four presentation slides about BizTalk Server 2009 performance. The presentations will give you a great insight into how the team sets up performance labs for the BizTalk projects they’re involved in, and have many many performance tips, links to online […]

Looping around elements of a message, follow-up part II

Hi all

I did a follow
up
to my old
post
about how to loop around the elements of a message a couple of days ago.

As you can se from the comments to my followup, Thiago mentions that there isn’t any
performance hit because everything is done inside an atomic scope. Now, Thiago is
naturally correct when he states, that no persistence occurs inside an atomic scope.
But as you can also see from the comments, I wondered about what to do about using
a request-response port – so I just had to test it.

For BizTalk 2009, just as the previous versions, you CAN’T have both the send shape
and corresponding receive shape used for a request-response port in the same atomic
scope. At compile time you will get this error: “an atomic scope may not contain or
call a service or scope that contains both the send and the corresponding receive
of a requestresponse operation on a ‘uses’ port or servicelink”.

This may seem odd at first glance, but it is due to the fact, that in order to make
sure the ACID properties
are respected at runtime the orchestration engine submits messages that are sent out
to the messagebox, but it doesn’t release them for the messagebox to route until the
atomic scope has finished. This way, if an error occurs inside the atomic scope, no
messages have actually been sent, and therefore, BizTalk can guarantee a consistent
state.

So basically, if the message isn’t released until AFTER the atomic scope, then there
is no way you can receive the reply inside the same atomic scope. Makes sense.

SO, if you want to loop around elements in a message by calling a receive pipeline
inside your orchestration, you can’t use request-response ports, as you can with other
patterns. Sorry, but that is the way it is.

Conclusion:

If you want to loop around elements inside an orhestration, use a receive pipeline
if possible since this is done in an atomic scope and therefore no persistence points
occur. If not possible, use the pattern described here.

Thanks, Thiago for pointing out that my post needed some more details



eliasen