Monday, October 10, 2016

Did you know Maximum Matches Limit of Query on Group Hub

I was doing load testing of an application and enabled tracking on it. Upon running the loadtest visited the Group Hub to ensure the number of messages received. 

I ran the query for all the Tracked Service Instances with maximum matches equal to 1000 and got the result.

Out of curiosity I kept on increasing the Maximum matches number, and bingo!!
the limit was reached. As can be seen in image below, 50000 is the maximum valid number.

Although this info isn't much useful but it's good to know the intricacies :)

Sunday, October 9, 2016

The message with Action 'xxx' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher.

Below is the fault message returned when WCF service was invoked with faultCode as ActionNotSupported

<s:Fault xmlns:s=""><faultcode xmlns:a="">a:ActionNotSupported</faultcode><faultstring xml:lang="en-US">The message with Action '&lt;BtsActionMapping xmlns:xsi="" xmlns:xsd=""&gt;
  &lt;Operation Name="Add" Action="" /&gt;
&lt;/BtsActionMapping&gt;' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver.  Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring></s:Fault>

Why it happened

When we consume a WCF service using BizTalk WCF Service Consuming wizard few artifacts are generated like XSD's, Orchestration and couple of Binding files.This binding files actually contains configuration pertaining to port, one of them is generated based on metadata obtained from the service consumed and the other has configurations using WCF Custom Adapter which is for you to customize if there is a need.

In order to invoke a method of a service we have to set Soap Action Header on Send Port.This tells which method to call (Add) which is defined by  ServiceContract Interface (ICalculator) under following ServiceContract Namespace( service  using through this port.


If there is only one method to be invoked then simply providing the Action works.But in case there are multiple actions to be invoked using same port then BtsActionMapping is used. (It can be used for single action too)

<BtsActionMapping xmlns:xsi="" xmlns:xsd="">
  <Operation Name="Operation_Add" Action="" />
  <Operation Name="Operation_Subtract" Action="" />
  <Operation Name="Operation_Divide" Action="" />

Where Operation Name should be the name of operation specified in Logical Port which is binded to this physical port.

You can manually create the send port and configure it accordingly, but binding files are already generated -- so I imported it directly and send port was created with SOAP Action header as can be seen.

After importing ,starting the application and while testing got fault message back and as it says their was mismatch in the Action. As can be seen in image below, Operation name is Operation_Add but as seen above action mapped is 

Operation Name="Add" Action=""

What to do

Operation Name which is mapped in SOAP Action header should be the name of operation specified in Logical Port which is binded to this physical port

Tuesday, September 20, 2016

Exception Handling block gives error - Use of unconstructed message

I got this compile time error today while trying to build the solution am working upon now. And this error was thrown by Exception Handling Block.

Why it happened

Upon exception, an email is sent to emailAdress which is available in the incoming message, the first message received in Orchestration (MSG_Main). For this that particular field is marked as distinguished and it is checked, if it is blank no mail sent and if not blank then send mail.


But exception block reports it as error when compiling the solution, for it the MSG_Main is not constructed. Its confusing as MSG_Main is received and that actually triggered the orchestration then why the error?

The reason is Exception block considers following - exception can occur anywhere within the scope, even before you receive the message, so the only thing available to exception block is the exception object from that scope(nothing else from that particular scope) and the things before the scope. And as can be seen from image below, the First Receive shape is in scope and that's the reason for error.

What to do

In order to get rid of this I moved the receive shape out of scope and error vanished!!!

Monday, September 19, 2016

Sending file as attachment using BizTalk Orchestration

The Simple Mail Transfer Protocol (SMTP) adapter is used to exchange information between a server running Microsoft BizTalk Server and other applications by means of the SMTP protocol. BizTalk Server can send messages to other applications by creating an e-mail message and delivering it to a specified e-mail address. BizTalk supports both ways - Static configuration and Dynamic configuration of SMTP adapter.

You would need to send email from Orchestration for various scenarios like dynamic mailto address/ Subject/Body or in workflow notification is to be send  where Subject changes depending upon  various scenarios ex. on success -- Subject is to be sent is "Transaction/Process completed successfully" and in error scenario "Transaction/Process failed" etc.

To demonstrate how to configure SMTP Port dynamically and how to add attachments, have used following scenario:


Keeping it simple, you receive a message which has details of email to be sent in it. You construct email message and configure SMTP adapter using those details.

Building the Solution:

1. Create schema for message holding email details

2. Create orchestration

Create an orchestration containing a Receive shape to receive Email_Details message from a static one way Receive port  followed by a Construct message shape containing a Message assignment shape where SMTP adapter is configured dynamically, and a send shape to send Email message through Dynamic port(code below). We also need to create two message,one for the input message based on Email Details schema and one for the output message based on String datatype.

SMTP.Attachments is the property available with SMTP adapter which provides a way to pass the path of files to be attached. If more than one fie is to be attached then, paths can be concatenated using pipe(|).

Constructing Email message and configuring dynamically SMTP server

MSG_Email= System.String.Empty;

MSG_Email(SMTP.Subject) = MSG_EmailDetails.Subject;

MSG_Email(SMTP.From) = MSG_EmailDetails.FromAddress;

MSG_Email(SMTP.SMTPHost) = "DemoMachinePM";

MSG_Email(SMTP.EmailBodyText) = MSG_EmailDetails.Body;

MSG_Email(SMTP.EmailBodyTextCharset) = "UTF-8";

MSG_Email(SMTP.Attachments) = MSG_EmailDetails.Attachments;

//For sending email to cc address use below line of code
MSG_Email(SMTP.CC) = MSG_EmailDetails.CcAddress;

MSG_Email(Microsoft.XLANGs.BaseTypes.ContentType) = "text/plain";
Port_Dynamic_SendEmail(Microsoft.XLANGs.BaseTypes.Address) = "mailto:"+MSG_EmailDetails.ToAddress;

I have set MSG_Email as System.String, as I don't intend to do anything with BizTalk message(MSG_EmailDetails). In case I needed to send the BizTalk message as an attachment then I would set MSG_Email as System.Xml.XmlDocument and assign the MSG_EmailDetails to it.

MSG_Email = MSG_EmailDetails;

And to send this also as an attachment would add following code

MSG_Email(SMTP.MessagePartsAttachments) = 1;

The send port used to send email is set as Dynamic one way (only send) with Pass Thru pipeline and address is set to toAddress.

3. Deploy and Test

Sign the application and deploy it, create a Recieve port with Receive Location having XmlReceive Pipeline. Send port would be already available as it is created while deploying solution because of it's dynamic binding.

To test the application, create the instance of MSG_EmailDetails and populate it with values and drop the file at location which is binded to the receive location.

Case 1: Input file (with one attachment info)

<ns0:Email xmlns:ns0="http://EmailAttachmentDemo.EmailDetails">




  <Subject>Email with attachment from demo server</Subject>

  <Body>Dynamic Email with attachment from demo server.</Body>



Output (Email delivered with one attachment)

Case 2: Input file (with two attachment info)

In order to sent multiple attachment, '|' (pipe) is used as delimeter(marked in red below sample)

<ns0:Email xmlns:ns0="http://EmailAttachmentDemo.EmailDetails">




  <Subject>Email with attachment from demo server</Subject>

  <Body>Dynamic Email with multiple attachment from demo server.</Body>



Output (Email delivered with two attachment)
Case 3: Sending Email Message also as an attachment

For sending MSG_Email message as attachment use below line of code


               MSG_Email(SMTP.MessagePartsAttachments) = 1;

As can be seen mail is received by address in cc along with EmailMessage as attachment too

1.The location where attachments are, should be accessible
2.Toemail address must not be empty and its size must not exceed 256 characters
3.CCemail address size must not exceed 1024 characters

Download Sample:

Sunday, September 18, 2016

The server response was 550 5.7.1 unable to relay for

While working on a demo solution for Email functionality of BizTalk, I created a a simple application in Admin Console, with a static send port configured with SMTP adapter. 

Send port gets invoked with arrival of trigger message from receive port, but mail wasn't sent due to following error 

 " The server response was 550 5.7.1 Unable to relay for ....."

Below is the SMTP Adapter Handlers properties, there was no problem

Why it happened

This is an error from your SMTP mail server. It indicates that your mail server is not configured to allow you to send mail through it and it could be for following reasons.

1.The outgoing mail server could not identify the sender.
2.There are some issues while authenticating the sender on the server and thus restricting them to send emails.
3.The receiver domain’s recipient policy has imposed restrictions on the sender’s domain.

By default, the SMTP virtual server allows relaying only from authenticated users. This configuration is designed to prevent unauthorized users from using your SMTP server to relay mail. The virtual server's default configuration allows only authenticated computers to relay mail.

What to do

Go to IIS6.0 Manager –> SMTP Virtual Server Properties –> Go to Access tab-> Click on Relay button

Click on Add button and add the ip adress or domainname of machine which you want to be included in the list

That's it. Now mails are sent successfully.

Saturday, September 3, 2016

No BizTalk Configuration database(s) found on server XXXX

We have setup a dev env -- a Virtual machine where BizTalk and SQL Server are both installed on it. Development and deployment is done on it through RDC. 

As the number of team members increased we decided to install BizTalk development components on each team members local machine and after development done, deploy on the Server (VM) and for that we added all the users in BizTalk administrator group on the server.

But they were not able to deploy the application, due to following error  

  <No BizTalk Configuration database(s) found on server "xxxx”.>

It was strange because we were able to deploy on the server with same user login, and not when trying from their local machine.

Upon looking on following blog:

This issue does not occur in SQL server 2008 R2 but with SQL server 2012, the solution is to grant view any definition permission to specific user which needs to deploy BizTalk application in VS.

Query to be used:

USE master 

We used 

USE master 

GRANT VIEW ANY DEFINITION TO “BizTalk Administrator group”

Sunday, August 14, 2016

Begineer to BizTalk Expert : Interview with Salvatore Pellitteri

Welcome to 22nd  interview of the series, today's expert is Salvatore Pellitteri.

He is Developer Team Manager in Microsys Srl. He works on integration application projects using BizTalk Server and on business intelligence projects using SQL Server platform.

Salvatore works with BizTalk Server since the first version and has worked in many big integration project with several Italian enterprise organizations using many technologies like SAP, Oracle, SQL Server, AS400, J.D. Edwards and HL7.

This year he has obtained the second Microsoft Most Valuable Professional award for BizTalk Server.

Let's begin the interview.....

Mahesh: Who are you and what you do? When did you start working on BizTalk? 
Salvatore: I am Salvatore Pellitteri, I live in Italy near Milan. I have a beautiful wife two wonderful children.I work for more than twenty years as a computer consultant. My company is Microsys and I am developer team manager.
I deal with application integration projects, data integration, data platform and business intelligence.In 2002, my boss told me that I had to follow an integration project between SAP and MSMQ with BizTalk Server. Biz what? I asked. Should be an Enterprise Application Integration platform. He replied. In short, so I started. What I remember is that I had to study really so much.

Mahesh: How did you mastered BizTalk (Learning path, amount of time)? 
Salvatore: It is difficult to say how much I had to study. During the first project I had to read a lot of documentation and I did extensive testing with my colleagues before we get to understand how it worked. A few years later I read the book by Dan Rosanova that made me understand how BizTalk works. It was enlightening. Later I started to read many articles, blogs, by Sandro Pereira, Michael Stephenson, Paolo Salvatori. Then I worked for about two years with Nino Crudele from which I learned a lot. So every experience gave me something. I can tell you that I started to study in 2002, I do not know when I'll finish.

Mahesh: Which are the major projects you handled so far?
Salvatore: Well, I can think of a project where I had to integrate the Italian public authority of the energy production with power generation systems.
It was really interesting because of the criticality of the process. Every application system was new for me so I think it was a great challenge.
Another nice project was to implement a true enterprise service bus for a large company that produces and distributes fuels.
The interesting thing was to have integrated many very different systems with each other and created a set of efficient and homogeneous communications.
Another great experience was to have integrated an order management system, that generates orders by an Internet portal, with an automated warehouse.
In a few seconds, the user confirms an order, the message is communicated to the warehouse that assembles the package and in a few minutes is ready for shipment.
This looks like a simple process, instead is definitely a series of activities and controls that make the process really critical and complex.

Mahesh: How do you see BizTalk compare to other integration platform?
Salvatore: BizTalk is the best !!! No, I am joking. Really I don't know, I don't be able to compare BizTalk with other product or maybe I don't want to do that.

Mahesh: What as per you is must to know to become an Integration(BizTalk) Expert?
Salvatore: You have to be curious. It is simple. You must have the desire to understand how an application system works, even if you do not know that system, you have to learn what are its interfaces and what is the best way to use them.
In addition to this you have to like to know the functional processes and not just the technical aspects. We can not develop good communication if you do not know the subject. What kind and when an information should be exchanged.

Mahesh: What are your thoughts on forums,blogs and articles etc.?
Salvatore: When I started doing this job there was nothing like this. The systems were much simpler and it was very hard to understand things. Today I think that is not possible doing my job without having the support of articles and blogs.

Mahesh: Your suggestion to a newcomers? What should be approach to get sound knowledge in BizTalk?
Salvatore: Read the book by Dan. J

Mahesh:There are many tools from community which support BizTalk in some or the other way(like BTDF, Bizunit etc), what do you say about it? Which ones you would recommend?Why?
Salvatore: There isn't one in particular that I recommend. I use a lot the "BizTalk Mapper Extensions UtilityPack", but over time I gathered a library of components that I use frequently.
The important thing is that when you start a project you have clear what are your tools.

Mahesh: What are your thoughts around BizTalk certification?
Salvatore: I think that Microsoft in recent years has lost interest in creating a certification path for BizTalk.

Mahesh: What is the future of BizTalk?
Salvatore: Good question. I think that Microsoft might want a unified integration platform that covers your needs on-premises and on the cloud. How and when it will get I do not know.

Mahesh: Any thoughts on cloud? What motivates you to do the community work?
Salvatore: The cloud is the future. I don't think it's anything to think about. I am sure that the community is going in that direction and soon you will see even more noticeable results.

Mahesh: Being MVP, do you feel that responsibilities get added? What is your thought on MVP?
Salvatore: Being MVP, gives you a way to be closer to the community, but also the responsibility to be a reference person. Being part of a community means contributing, then take part of events, write articles and all this takes time.
Also change people's expectations. From an MVP, you expect much more and this leads you to try to give something more.

Mahesh: As per the Roadmap provided by Microsoft,LogicApps can be run on-premise in addition to Azure.Do you think Azure Stack Logic Apps on prem will supersede BizTalk Server?
Salvatore: Let's say that when I talked about a unified integration platform was referring precisely to Logic Apps. But then again, it is my thought and not what I know that Microsoft will do.

Mahesh:From my perspective, Microsoft keeps coming up with Overlapping technologies like recent ones MABS and Logic Apps, in some situation it gets puzzling. What you say?
Salvatore: I think that MABS is died. Microsoft is doing evolve Logic Apps and that is the direction to take.

Thanks a lot Salvatore for sharing your insights and experiences, this will surely benefit many !!!

Feel Free to ask questions to Salvatore in the comments!!!!!!!! 

Related Post:

Wednesday, June 22, 2016

Begineer to BizTalk Expert : Interview with Alan Smith

Welcome to 21st  interview of the series, today's expert is Alan Smith.

Alan Smith is a Microsoft Azure developer, trainer, mentor and evangelist at Active Solution in Stockholm. He has a strong hands-on philosophy and focusses on embracing the power and flexibility of cloud computing to deliver engaging and exciting demos and training.

Alan has held the MVP title for 10 years, and is currently MVP of the year for Windows Azure. He is in the organization team for the CloudBurst conference and the Global Windows Azure bootcamp.

Let's begin the Interview....

Mahesh: Who are you and what you do?
Alan: I’m Alan Smith, I’m an Azure MVP, I’m from the north of England, and living in Stockholm, Sweden. I work for Active Solution, a company that specializes in system development and leveraging Microsoft Azure technologies for our customers.

Mahesh: When did you start working on BizTalk?
Alan: I started working with BizTalk Server in 2004, when BizTalk Server 2004 beta 2 was released.

Mahesh: How did you mastered BizTalk (Learning path, amount of time)?
Alan: Back in 2003, learning BizTalk was a challenge, and took a lot of perseverance. There were no books and very little in the way of documentation. I remember planning to spend a weekend learning BizTalk, and it took me until late Sunday night before I’d even got it installed. After browsing the BizTalk forums I realized it was not just me, there were many others who were struggling to learn the product. This made for a great community atmosphere, with many people sharing ideas. You really needed to read people’s blog posts and use the forums to learn about BizTalk.
I would say it took me about two years to get proficient at BizTalk, maybe four years before I would say I had mastered it. Some of the functionality, such as EDI and trading partner management, I still don’t have much experience of.

Mahesh: Which are the major projects you handled so far?
Alan: My first BizTalk project was an order processing system for the Swedish dairies. This started in the summer of 2004, and I was responsible for the architecture and most of the development of the solution. I have since then worked on a number of integration projects in many different industries, such as insurance, retail, public services and education.
I have also been very involved in training, and have delivered the QuickLearn BizTalk courses for over 10 years.

Mahesh: How do you see BizTalk compare to other integration platform?
Alan: I have not has much experience of other integration platforms. I see BizTalk competing very well price wise, and for Microsoft Developers who are used to Visual Studio and .NET it’s a natural choice for an integration platform. Unfortunately Microsoft has not focused as much energy as they could on improving BizTalk in recent versions, so I feel that the product is not where it could have been in competing with other integration platforms.

Mahesh: What as per you is must to know to become an Integration(BizTalk) Expert?
Alan: Having a solid understanding of the BizTalk feature set is a good start. Knowing it’s strengths and weaknesses, and how to get the best out of the functionality for a given scenario.
Integration is a very diverse discipline, and the knowledge you require will vary from project to project. Sometimes you will need to be an expert on web services, other times you will need to know about SAP and the old IBM mainframe that sits in the basement. You may also be working in different industries, so there may well be a lot of business specific information you need to know about.
Politics can always be an issue in integration projects, you are dealing with different teams who work with different technologies, and may will have a very different working culture. In some integration projects, politics can be the biggest challenge.

Mahesh: What are your thoughts on forums,blogs and articles etc.?
Alan: I learnt BizTalk thanks to the blogging community. In 2014 I published the first edition of “The Bloggers Guide to BizTalk”, a free CHM format e-book containing the best blog posts from the BizTalk community. This was before there were any books on BizTalk, so it became the “must have” resource for BizTalk developers. For the next couple of years I added blog posts and published it every month or so.
In those days the forums and blogs were the only way to learn BizTalk, but nowadays there are many good books around. It’s funny to see the same names appearing in all the best BizTalk books, blog posts and forum post replies. It seems there has always been a very strong BizTalk developer community, and it’s great to be part of it.

Mahesh: Your suggestion to a newcomers? What should be approach to get sound knowledge in BizTalk?
Alan: Today there are so many great books on BizTalk Server. Many of them are written by authors who were contributing to The Bloggers Guide to BizTalk. My suggestion would be to start by reading on-line to get an idea of what BizTalk is, and what it can do.
Bear in mind that integration is a big discipline and BizTalk, although it’s a great product, is not always the best tool for the job. Many of the best BizTalk / integration experts know BizTalk well, but they are also experienced with other integration products and technologies. Having a broad knowledge of integration tools, technologies and techniques is a valuable asset.

Mahesh: There are many tools from community which support BizTalk in some or the other way(like BTDF, Bizunit etc), what do you say about it? Which ones you would recommend?Why?
Alan: It’s great to see a lot of community contributions here. I have used BTDF a lot, starting in 2004, when it was pretty much the only way to deploy BizTalk applications. BizUnit is also useful in many testing scenarios.
The tool that has impressed me the most was the BizTalk Orchestration Profiler. It’s very ingenious in the way it combines the orchestration tracking data with the images of orchestrations to create a visual representation of the orchestration execution flow and performance.

Mahesh: What are your thoughts around BizTalk certification?
Alan: I have taken all the BizTalk exams since 2004. For the 2004 exam I spent a lot of time preparing, and learning the feature set that I was not experienced with. For the other exams I have not done any preparation, and managed to pass with a fairly good score with my knowledge and experience. I think the exams are worthwhile if a good BizTalk developer can pass based on their hands-on experience of the product.
It would be nice to see a BizTalk administration exam. This is an important discipline, and providing a certification path would be a good way for BizTalk developers and administrators to have their skills recognized.

Mahesh: What is the future of BizTalk?
Alan:As I see it, BizTalk has been in maintenance mode since about 2010. There has been talk of a number of Microsoft products and technologies replacing BizTalk (Oslo, Dublin, AppFabric, MABS, Logic Apps etc.) but, so far, none of them has succeeded.
The core architecture of BizTalk is rock solid, and has survived, pretty much unchanged, for the past decade. I think that BizTalk will stay around for another couple of versions at least. I don’t see anything on the horizon that will replace it.

Mahesh: Any thoughts on cloud?
Alan: I was lucky enough to be at PDC 2008 in Los Angeles and saw the Azure announcements in the keynote. I’d really gone there to hear the latest news on the “Codename Oslo” technologies that were planned to replace BizTalk, but I had spent some time working with what is now the Azure Service Bus, and was interested in the new cloud-based technologies. My allegiance has shifted from BizTalk to Azure, and I have been an Azure MVP for a number of years. 
The main reason I learned BizTalk was that it was new, it was cool, it was challenging to work with, and it was evolving rapidly. All these are now true of the Azure technologies, and I’m involved in a number of projects that aim to leverage cloud-based services to our customers.
Microsoft has a great offering with Azure, it has taken a number of years for the technologies to mature and gain acceptance with customers, but there are now a lot of opportunities to use these technologies in many customer scenarios.

Mahesh: What motivates you to do the community work?
Alan: I enjoy sharing my ideas and experience with others, so I have focused a lot of energy on delivering training courses, both classroom courses, and on-line content for PluralSight. I also like to engage with the development community, and have presented at a lot of conferences and user groups.
One of the best events I have been involved with has been the Global Azure Bootcamp, which has been running for four years. Together with a few friends, we had a crazy idea of running a hands-on day learning Azure technologies on a Saturday, and running this at a few different locations to build up a community of events. For the past two years we have had almost 200 locations around the world. It’s a lot of hard work, but seeing the twitter stream, and the photos of people from so many different countries and cultures all focusing on the same learning experience is a great buzz.

Mahesh: Being MVP since 2005, do you feel that responsibilities get added? What is your thought on MVP?
Alan: I have never felt that as an MVP I have any responsibility to Microsoft. I see it more as a reward for people who contribute to the community. I have got a lot out of the MVP program over the past 10 years, it has given me the opportunity to meet with so many passionate developers, and share ideas and inspirations about technology and how that can be promoted in the community.
The MVP summit is awesome, in that you get to meet and mingle with like-minded people from many different communities and backgrounds who all share the same passion and energy for the technologies they work with.

Mahesh: As per the Roadmap provided by Microsoft,LogicApps can be run on-premise in addition to Azure.Do you think Azure Stack Logic Apps on prem will supersede BizTalk Server?
Alan: Personally I don’t see this happening. We have seen a number of technologies trying to use a graphical development tool to replace BizTalk (Workflow Foundation, Azure AppFabric Composite Apps, MABS). These technologies are pretty much redundant now, and BizTalk is still the weapon of choice for many integration scenarios.
I think many of these technologies try to suit a number of scenarios. Workflow Foundation was a general-purpose workflow technology, and therefore lacked the tighter coupling to message orientation that BizTalk orchestrations provided. I see the same with Logic Apps.

Mahesh:From my perspective, Microsoft keeps coming up with Overlapping technologies like recent ones MABS and Logic Apps, in some situation it gets puzzling. What you say? 
Alan: I’ve been dealing with this for over 10 years. We have seen many technologies come and go (Workflow Foundation, Windows Server App Fabric, Codename Oslo, Azure App Fabric, MABS etc.). It’s great to see Microsoft innovating here, without that innovation so many of the technologies we use today would not exist. It’s also good to see Microsoft making these technologies available for developers to experiment with and share their feedback. Sometimes what seemed like a good idea at the time may fail as a product, other times it may become a core service that many people leverage in projects.
It could be argued that the Topic and Subscriptions in the Azure Service Bus overlaps with the functionality in the BizTalk message box. They both support publish-subscribe messaging, both have correlation, promoted properties, failed message handling. I have used both of these technologies in a number of projects and, when used in the right scenario, they both provide solid functionality for solving our implementations. I also found BizTalk developers are able to do great things with the Service Bus, as they know the best techniques for working with asynchronous message processing.

Thanks a lot Alan for sharing your insights and experiences, this will surely benefit many !!!

Feel Free to ask questions to Alan in the comments!!!!!!!! 

Related Post: