Five Rules to Simplify Large Scale BizTalk Orchestration Development

Many times on larger BizTalk projects developers need to share working inside Projects and Orchestrations. This means at some point you will have conflicts. While Visual Studios offers the option to Auto-Merge files, I have not seen this done successfully with BizTalk Orchestrations.

Here are 5 simple rules for simplifying and streamlining large scale BizTalk Orchestration Development.

  • Rule #1 – Do not use the default Operation Name on Orchestration Ports
    • When using Direct Routing Port out of an Orchestration, by default only two properties are routable. Those are MessageType and Operation. If you leave Operation as the default value of Operation_1 all the Ports created will be the same.
    • Operation is one of the most important properties that can be used for routing so make sure it is useful.
  • Rule #2 – Always set up Port Types the right way the first time around
    • If using Direct Routing, always use Direct Routing locally. I see a lot of Specify Now or Specify Later that turns into Direct Routing later on. This causes Binding File changes and could mask errors in routing.
  • Rule #3 – Define all your messages as Multi-Part messages
    • Eventually, the message type of a message used inside the Orchestration will need to change. Ensuring all Messages are setup as Multi-Part messages will make this change trivial as compared to having to change break port connections, change port types, update and message variables.
  • Rule #4 – Ensure each developer has the same folder structure for testing locally
    • This helps simplify changes to binding files. If all the developers use the same structure, a common set of development binding files can be stored in TFS.
  • Rule #5 – Smaller units of work
    • Try to break Orchestrations into small units of work and leverage the Call Orchestration shape. This allows more than one person to work on larger processes and ensures simplified testing. Just ensure the performance hit of using the Call Orchestration is going to be acceptable. While I have not done the testing myself, I think it is a very optimized call and not something I would be worried about in most cases

WikiNinjas – Official Blog of TechNet Wiki

The official blog of TechNet Wiki contains multiple posts on what drives the community collaborating on the TechNet Wiki. This blog is maintained by Wiki Ninja’s. This is a group of authors who celebrate and evangelize the community and social-authoring excellence that is known as TechNet Wiki.There are several categories the Wiki Ninja’s are writing posts for:

  • Monday – Interview with a Wiki Ninja
  • Tuesday – TNWiki Article Spotlight
  • Wednesday – Wiki Life
  • Thursday – Community Wins
  • Friday – International Update
  • Saturday – Top Contributors of the Week
  • Weekend Surprise

Every day there is a new post depending on day of the week. This blog site offers a great access point to explore what is being contributed on the TechNet Wiki and what drives the TechNet Wiki Ninja’s.

Since the end of last year I have written a couple of blog posts in a few categories. Below you will find a list of my blog posts:

Cheers,

– Steef-Jan Wiggers

Exposing common service(s) to SAP and WCF clients

Exposing common service(s) to SAP and WCF clients

I have a scenario I am dealing with at work that involves exposing some common data to two different systems: SAP and a Custom ASP.Net Web App.  Both of these applications will request BizTalk to fetch some data from a variety of database views, aggregate it and package it up nicely for these calling systems.  Both Systems will be requesting this information on demand – i.e. Synchronously.  SAP will be calling an RFC hosted in BizTalk,via the SAP Adapter, using the method that I identified in a previous post.  The Custom Web Application will be consuming a WCF Service hosted in IIS.

Conceptually, my solution looks like this:

image

Whenever you have multiple systems trying to consume the same data, you generally  try to utilize a Canonical schema approach.  Canonical schemas allow you to take the different external data formats and transform them into a common internal format before handing them off for processing like in an Orchestration. 

image

You then perform all of your processing using this internal format to reduce the amount of code/configuration that you require to solve the problem.  Additionally, when you need to make a change, you do so in one place as opposed to two(or multiple) locations.

In order to keep things simple for this POC, I decided to reuse my RFC Add solution where you can have a client pass two numbers to BizTalk, BizTalk will then sum them and provide the answer back to the calling application.

image

For the Web Client, I will simply expose custom “Web” Schemas as WCF Services using the BizTalk wizard provided within Visual Studio.  Note that I did not want to expose my SAP schemas to my Web Application.  I could have done that but it is not a good practice as any changes to the SAP schemas would impose a change on my Web Application whether it was required or not.  Also, SAP schemas tend to be complex and we don’t want to unnecessarily propagate that complexities onto other applications if we don’t have to.

Initially I thought my solution would be pretty straight forward:

  • Generate my SAP Schemas
  • Create my Schemas that will be used for the Web Application and expose them via Wizard
  • Create my Canonical Schemas
  • Create related maps

I then created my logical port and set the Request and Response message types to my Canonical schemas. I deployed my application and configured my Physical Port within the BizTalk Admin Console.  I decided that I was going to re-use the port that was created as part of the BizTalk WCF Publishing Wizard.  I would simply add a Receive Location for SAP and set the appropriate inbound and outbound port mappings. 

Using inbound port mapping is very simple, I can specify multiple maps and BizTalk will detect which Map to use based upon the message type that is being passed.   So if we receive a request from SAP, BizTalk will detect this and use the SAP_to_Canonical.btm map.

 

image

It then hit mehow will BizTalk determine which Map to use on the Outbound (Response) message? The message being passed to the port will always be the same as it will be my canonical format.  I soon found out.  As you can see in the screenshot below, my SAP response was sent down to my Web Client(which in this case was the WCFTest tool).  Not the desired result that I was looking for.

image

While chatting with a colleague he mentioned why don’t you try a Direct Bound port.  I have used Direct Bound ports in the past but only in asynchronous scenarios.

So to fix this, I changed:

  • My logical Request-Response port to be a Direct bound port and to be Self Correlating.

image

  • Created an additional Receive Port.  I now have a Receive Port for my Web App and for SAP.

image

  • Made the appropriate Inbound and Outbound Port Mappings.  Now each port only has 1 Inbound and 1 Outbound port mapping.

image

 

  • My orchestration will no longer have a Physical Port to bind to since it will be Direct Bound to the MessageBox

image

  • Now when I execute my test from the WCF Test Client, I get the correct result in the WebAddResponse message type that I am expecting

image

  • I am also getting the correct response from SAP

image

Conclusion

The magic in this solution is really the Request-Response direct bound port.  The idea is that our Orchestration will place a subscription on our Canonical Request message.  It doesn’t really matter how that message gets into the MessageBox as long as it is there.  In this case we have exposed two end points, one for SAP and one for our Web App.  In both scenarios they will take their specific Request message and transform it into our Canonical message and therefore our Orchestration will pick it up.

Request-Response ports always use a form of Correlation so that it can provide the correct Response back to the calling client.  We can take advantage of this mechanism to ensure we get the correct Canonical Response message which in turn can use Outbound Port mapping and send our response in the correct format to the calling application.

Why I’m attending Microsoft World Wide Partner Conference (WPC) in Toronto

I had no intention of attending WPC until last night. I normally got this tendency of not booking for the event till last minute and start to feel about it during and after the event, just looking at missed opportunities. But it’s always a touch call. Conferences these days are not cheap. To start with just registration fee is $1999 on top of that you got flights, hotels + other expenses and more importantly 1 week of your time outside your work and family.

You need to basically think wisely and plan where you need to invest your time+money. There are tons of conferences/meetup through out the year. I normally attend one conference a year since 2003. It was typically TechEd and PDC until 2007, and once I became a MVP, then for the past 5 years MVP Global summit became my choice of conference.

Why did I decide to go to WPC?

BizTalk360 is a matured product now after it’s inception roughly a year ago. We got medium to large enterprise customers over 12 countries now. Until now the medium for us to promote BizTalk360 is via this blog, various BizTalk user group meetings across Europe and social media. 

In recent days I got a gut feeling the awesomeness of BizTalk360 is not reaching the right audience (enterprise Microsoft BizTalk Server customers). I can sense some of the challenges here

Blog: My blog got over 8,500 readers (took 8 years to build). That’s a huge number, given the official world wide BizTalk server customer base is only 12,000. But the problem is, I guess most of my blog readers are from technical background, mainly developers.

User Group meetings: Presenting BizTalk360 in the user group got the same problem as blog. The people attending the UG meetings are typically with developer/technical background.

Social Media: Social media is good for viral marketing, the term viral is very important. If you got a product that’s attractive to wider audience then social media could be useful. But if you are targeting an enterprise customer base (like what we do), then I believe it may not be the right place. Most of the decision makers at enterprise software don’t hang around in social media space.

We honestly believe lot of BizTalk customers out there can get benefited from using BizTalk360 to improve their day-to-day operational efficiency. The focus for me at this stage is to get the message about BizTalk360 to the customers. For that BizTalk360 need a right channel. Microsoft partner network, especially the ones specializing on Application Integration space dealing with Microsoft BizTalk customers will be the right channel for BizTalk360.

WPC provides us this great opportunity of hooking with all these partners in one place. There will be over 15,000 people across 150 countries attending the conference this year.

My objective is very simple, I wanted to talk to as many people as possible during this week. So, if you are reading this message and you work with Microsoft BizTalk server, please give me a buzz. You can contact me via @saravanamv, http://www.biztalk360.com/content/contact

Nandri!
Saravana

General: My first ever game of baseball-live

After getting tickets to the Mets V Cubs tonight 4 of us decided to go to the baseball.
First game and I’m very sketchy on the rules.

What a night!! Great night and I can totally see why you get hooked on it.

Chanting and cheering through the game, a home run hit came our way hit from a Cubs
player. I *caught* it(my brother was waiting for a hit all game unfortunately he was
off buying food when all this was going on) and had the match ball in my hot little
hand.

What to do next? – being my first game ever and not knowing too much
about the traditions the whole crowd erupted all around me.

I thought it was just crown banter for catching the ball, it was intense as one half
was screaming to keep the ball, the rest throw it back – either way I figured I was
done for by someone.
The game was stopped in the meantime

After conferring with some guys behind me, I ended up throwing it back as to a Mets
supporter this indicates that the ball is not worthy of keeping. (The Cub’s supporter
reciprocate while at home as well)

What a moment, what a game and what fun. Jane – one of the boys behind me later went
and bought me a baseball, as a good will gesture. Thanks Jane that’s very
kind of you.

Great fun – what a game.

Blog Post by: Mick Badran

Windows Azure Service Bus EAI/EDI: My speaking engagements summary and resources

Windows Azure Service Bus EAI/EDI: My speaking engagements summary and resources

In the last couple of months I’ve been busy participating in several national and international events talking about Azure Service Bus EAI/EDI services, or as we now know: BizTalk as PaaS (BizTalk on the cloud). It all started with the invitation of Nino Crudele to participate at the Overnet BizTalk Innovation Event and speak about […]
Blog Post by: Sandro Pereira

Resolving ’Performance Counter OS (pdh) call failed with error code PDH_CSTATUS_BAD_COUNTERNAME.’ on SharePoint 2010

Overview
I recently came across a frustrating issue when looking at ULS logs for a client with a SharePoint 2010 installation.  We were seeing huge numbers of repeated errors stating :

Performance Counter OS (pdh) call failed with error code PDH_CSTATUS_BAD_COUNTERNAME.

PDH failure on counter \<servername>\Sandboxed Code Process Pool\\Processes Stopping with error Unknown error (0xc0000bc0)

Unable to create system […]
Blog Post by: Michael Gerety