Sunday, March 1, 2015

Begineer to BizTalk Expert : Interview with Kent Weare

Welcome to ninth interview of the series, today's expert is Kent Weare.

Kent Weare is an experienced leader who possesses strong technical skills. Passionate about architecture with a specialty in integration. A graduate of the University of Regina, has 10+ years of IT experience.  This experience includes working on projects for Provincial and Federal Governments, a multi-national bank in the United States, Health Care projects in Eastern and Western CanadaRecognized by Microsoft as an Integration MVP - 8 Years.


Let's begin the interview....

Mahesh: Who are you and what you do?
Kent: My name is Kent Weare.  I am based out of Calgary, Alberta, Canada where I work for an Energy company as a Senior Solutions Architect.  My education background includes a Bachelor’s degree in Computer Science from the University of Regina and a Master’s degree in Information Management from Arizona State University.

Mahesh: When did you start working on BizTalk?
Kent:In 2004, I was working for the Canadian Federal Government as a Web Developer.  I was then assigned to a project where there would be some integration required. The architecture team insisted that we use the new integration platform called Microsoft BizTalk Server 2004.  At the time I didn’t even know what it was but was willing to give it a shot. I received Microsoft Official Curriculum (MOC) training and have been on several BizTalk projects ever since.

Mahesh: How did you mastered BizTalk (Learning path, amount of time)?
Kent: Back in 2004-2006 there was not a lot of BizTalk content out there.  I recall owning the big orange book (BizTalk Server 2004 Unleashed) and learning a lot from it.  Also, Alan Smith created essentially an e-Book that contained many different blog posts and content which was useful.  I was also very dependent upon Stephen Thomas’ BizTalkGurus.com website for its forms but also its blog aggregator.Today the landscape is very different.  There are plenty of BizTalk books available, active bloggers and a vibrant online community.  I think the work that Saravana Kumar and Michael Stephenson are doing with Integration Mondays (http://www.integrationusergroup.com/) is outstanding and every person interested in Microsoft Integration should be consuming that content regardless of whether it is live or viewed offline after the fact.  
It is very difficult to keep up these days.  My suggestion is to view as much of the content as possible.  It isn’t realistic that you will be able to digest it all but if you are able to make some mental notes about different approaches to solving a problem, then you can at least go back and revisit the blog post/video/whitepaper to retrieve the necessary details.

Mahesh: Which are the major projects you handled so far?
Kent: I have been on some small $50 000 projects up to 15 million dollar projects.  A couple that stand out for me are building an Energy Infrastructure Quoting system that included integrating Dynamics CRM, SharePoint, Microsoft Project Server and SAP.  It was one of those “impossible” projects that we were able to deliver.  We had a great project team and we really came together as an IT management team to deliver this.  Everyone was working towards the same goal and the results showed it.Another one that stands out for me was being involved in an Outage Management System (OMS) in the utility space.  The company was introducing a SCADA platform that allowed for remote command and control and we needed to hook this platform into our corporate systems that included a CIS tool, Work Order Management System, SharePoint and SAP. It was another very large project but it was great to be part of a project where there was a lot of engagement from the Business Units and we were building a solution that provided tangible results for the company and customers.

Mahesh: How do you see BizTalk compare to other integration platform?
Kent: I do have some experience with some other platforms so this is an interesting question.  If we talk about BizTalk Server 2013 R2, I see a very mature, robust, bug-free platform with a great eco-system.  If there are some areas of improvement, I think we need to see better SaaS connectivity and more features in the BizTalk Services platform.  I am extremely encouraged to see where Microsoft is headed with its support for Microservice architectures.  I think this platform will give BizTalk developers the toolset to address some of the SaaS and lighterweight integration scenarios that can be difficult at times to address with the Server platform.
For me, I think the next few years are going to be really about Hybrid integration scenarios and having a rock-solid Server Platform in addition to a very agile Cloud platform will give Microsoft customers and partners all the tools required to deliver compelling solutions. Having this type of flexibility will be really important as IT Organizations move towards 2 speed , or bimodal, IT where you strike a balance between delivering rapidly in order to achieve business results while ensuring you are not jeopardizing mission critical business process. With regards to other platforms, I think it is a very competitive landscape at this time.  There are some platforms that provide very lightweight integration, but are challenged in some of the more complex messaging scenarios that many integration veterans are accustomed to. With this in mind, I think it is important to look at Integration platforms from a requirements based perspective.  Much like working on a business project, you take a look at requirements first before you build a solution.  I don’t see selecting an Integration platform to being any different. For people who are interested in this approach, I recommend you check out a recent presentation that I gave at the Integration User group where I discuss some requirements that I would be looking for if I was shopping for an Integration Platform.  You can view this recording here: http://www.integrationusergroup.com/?event=what-to-look-for-in-an-integration-platform&event_date=2015-02-02

Mahesh: What as per you is must to know to become an Integration(BizTalk) Expert?
Kent: In my opinion, you need to understand the underlying BizTalk architecture to call yourself an expert in BizTalk.  BizTalk has a very sophisticated messaging engine that includes pub-sub capabilities.  Before architecting solutions, you really need to understand how this works so that you are able to add and support new interfaces moving forward.In addition to this, I think it is important to understand the areas that potentially can get you in trouble if you are not careful including Tracking and Throttling. These are both very useful features but may be used differently depending upon your requirements. 

Mahesh: What are your thoughts on forums, blogs and articles etc.?
Kent: I think these are all really important channels and the BizTalk community is excellent at contributing artifacts.  I find it very interesting that when there is 
something new announced there is almost an ‘arms race’ in getting that content out there as people want to be the first to try out a new feature. If there is a better integration community than Microsoft’s I have yet to see it.

Mahesh: Your suggestion to a newcomers? What should be approach to get sound knowledge in Biztalk?
Kent: The barriers of entry for learning BizTalk are extremely low.  In addition to all of these blogs, webinars, articles there are also free Hands on Labs provided by Microsoft http://blogs.msdn.com/b/amantaras/archive/2011/10/13/biztalk-2010-virtual-labs.aspx . Other commercial offerings include training from a Microsoft partner 
like Quicklearn http://www.quicklearn.com/ or viewing courses that are available on Pluralsight http://www.pluralsight.com/ (subscription required).

Mahesh: What are your thoughts around BizTalk certification?
Kent: This has the potential to be a conflict of interest for myself as I have co-authored two BizTalk certification guides but I will answer the question anyways. Overall, being BizTalk certified is a good thing but not mandatory in order to be successful with BizTalk.  I think it is a great measuring stick for those learning BizTalk and want to gauge their abilities as they become more comfortable with the toolset.  It does not guarantee great rewards, or opportunities, once you have passed it but can be beneficial.

Mahesh: What is the future of BizTalk?
Kent: I think the future of BizTalk is bright as we begin to see some of the details unfold regarding the next generation platform.  I do think we are headed for a period of transition between the traditional platform and this new platform, but welcome the next version of BizTalk Services as I do think it is needed to address some of the emerging use cases that we are starting to see including SaaS, Mobility and APIs.

Mahesh: Any thoughts on cloud?
Kent: While there are still some companies that are bound to On-premises solutions, I think the number of these organizations is quickly shrinking.   Within the past 3 years I have seen this with my own eyes and continue to see the ‘needle’ being pushed towards cloud solutions instead of hosting within your own data center.  I have also seen CIO strategies that include dissolving the data center in 5 or less years.  I was recently at a CIO event where a Vice President of a City Utility proclaimed he has no business running a Data Center. The more I think about it, the more I think he is right.  As a group of Integration Developers/Architects the cloud creates a lot of opportunities to build solutions that allow these organizations to transform their business. 

These SaaS solutions, by nature, are on their own islands and they need data to be moved in and out of them for them to provide value to the broader organization. This is where we come in to enable these businesses that allow them to achieve the results they are after.

Mahesh: What motivates you to do the community work?
Kent: Initially, I was a ‘net importer’ of the community.  I leveraged it to learn BizTalk and help me out with problems that I was encountering on my projects. I found, over time I was able to answer more and more questions on the forums and decided to “pay it forward”.  The forums led to blog posts which I have always enjoyed writing.  I may be in the minority, but I do like writing technical documentation.  It would always frustrate me to find a blog post that I knew solved the problem that I was trying to figure out but the author left out a few key pieces.  As a result, I have always tried to include as much detail as possible in order to provide a good experience for the reader.


Those are great insights, this will surely benefit many, thanks a lot Kent !!!

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




Related Post:




Wednesday, February 25, 2015

Must receive before sending a message whose messagetype corresponds to a requestresponse operation on an implemented port(Second approach)

The issue was due to two response sent against single request on requestresponse port and for that I wrote a post : http://tech-findings.blogspot.com/2015/02/must-receive-before-sending-message.html  but was curious to find if there is another way to do this and Deepak Sanghi commented on the link which I shared  on LinkedIn , about the another approach to handle this scenario.


It made sense, and I tried it. Below is the modified orchestration


Changes  done as below:

1.   Receive Input Message
2.   Transform to destination format
3.   Send transformed message to destination system
4.   Construct positive response message (but not sent)
5.   If an exception occurs in above steps then catch it in Exception Handler
6.   Construct negative response message  including exception message (but not sent)
7.   The last thing is to place a send shape which sends response

So depending upon the scenario either of the positive response or negative response will be created but wouldn't be sent immediately instead it is sent at last after evaluating the exception.



Related Post:


Monday, February 23, 2015

Must receive before sending a message whose messagetype corresponds to a requestresponse operation on an implemented port




The above error occurred in an Orchestration, in which following scenario was to be orchestrated: the process gets started after receiving message over the RequestResponse port (HTTP based) followed by transformation to the destination format and sending out the transformed message to destination system. If all is ok then response message is to be sent back to RequestResponse with status as Processed and if something goes wrong then response message is to be sent back to RequestResponse with status as Failed and Error message.

Based on this, below Orchestration is designed:


As an exception was to be handled so Scope with TransactionType None was added followed by Exception Handler. So flow looked simple and straight forward:
1. Receive Input Message
2. Transform to destination format 
3. Send transformed message to destination system
4. Construct response message and send Positive response back
5. If an exception occurs in above steps then catch it in Exception Handler
6. Construct response message and send negative response back including exception message

All looked good, until it was compiled and error was notified.


Why it happened:

As can be interpreted from error message, there was mismatch found in the number of Request received to the number of Responses sent to the RequestResponse port. Although the flow logically appears correct but syntactically it is not. RequestResponse port requires a pair (one receive and one response) to get successfully validated, so while compiling when first send shape (connected to response operation) is found it gets validated (for compiler pair is completed), and going down in Exception block when second send shape (connected to response operation) is found it throws an error as no matching receive shape is found to complete the pair.



What to do:

In actual, there is if else situation depending on which Response message is to be sent with respective status associated with it. And even compiler loves this segregation as only one condition at a time will be true thus only one pair will form which is valid.
Below is the redesigned Orchestration:


The changes done :
1. Added a Boolean variable _exceptionOccurred initialized with false.
2. In Exception block _exceptionOccurred  is set to true, so whenever exception occurs the variable will be true

3. Then Decide shape is placed under Exception block
4. So if value of variable is false(NoException) then Response message with status processed ok is constructed and sent to requestresponse port

5. And if value of variable is true then Response message with status failed is constructed and sent to requestresponse port


Wondering if there is any other way to handle this scenario?



Friday, February 13, 2015

A schedule 'OrchestrationName' with parameters cannot have an activatable receive

Scenario is simple, I receive a message and depending upon value present in the distinguished field I had to call a child Orchestration, which will do its intended job and return me back the result (Synchronous call). Below is what I encountered:



Why it happened:


As can be seen from image below, I had created an Orchestration Parameter (although by mistake ;) ) .



So what’s wrong in this?

The error says that if you have defined an Orchestration parameters then it can’t have a receive shape with Activate property set to true.

Why So?

Defining parameters is allowed only in the Orchestration which are to be started/called(Child) from some other Orchestration(Parent). Thus the invocation of such orchestrations does not happen with the Receive shape which is looking out for the message it is configured to, instead it is based on the parameters which is defined in it. So if there is requirement where an Orchestration needs to serve as child orchestration then remember you can't use receive shape to start the process and where an Orchestration is supposed to be started by Receive shape, you can't define parameters.

What if I need to call A->B and B-> C,  B is parent to C?

In this case it will work provided that Activation set to false—that is, only orchestrations that are invoked from another process—will be available for selection, as B is child orchestration to A and it gets instantiated with parameters so even though it is parent to C, it is not activated by Receive shape.


What to do:

Remove the parameter else you won’t be able to compile as having a parameter in Parent orchestration which is instantiated with Receive shape contradicts to the way it is designed to work.  

Monday, February 9, 2015

RPC:0x800706D9: There are no more endpoints available from the endpoint mapper.

Today, it was the BizTalk admin console trying to play with me,  when I opened the admin console, found that am not connected to any BizTalk group.

Seeing this, I tried to join the existing group:
1. Right click the BizTalk Server Admininstration 
2. Connect to existing group
3. Provided the Server name and Database name
4. And clicked ok
5. Got couple of following error
 

6. When trying to refresh the BizTalk Group Node
7.As expected while trying to restart host instance, following error was popped out:


Why it happened: 

There are few scenarios where we can face such errors:
  • Enterprise Single sign on is not installed correctly
  • Enterprise Single sign on in not configured properly/correctly
  • Enterprise Single Sign on service is  not running(not started)

What to do:

Verify that Enterprise Single Sign On Service is running, Run->Services.msc->Enterprise Single Sign On and  check if status is Started
"Enterprise Single Sign-On Service" gets installed while installation of BizTalk and it is there we have to specify the user account name, under which this service will run. That user account should have administrative privileges on the machine else SSO service will not start. And It is mandatory to have as all the configurations are stored in it.
In my case it  was the change in the password (which was part of company policy) which made this service stop and group unavailable. So I needed to reset the credentials for this service.

For that
1. Right click 
2.Go to LogOn  Tab
3. Update the credentials 
4. Click ok
 
5.Start the service