Sunday, November 27, 2016

Begineer to BizTalk Expert : Interview with Rachit Sikroria

Welcome to 24th interview of the series, today's expert is Rachit Sikroria.

Rachit Sikroria is a Senior BizTalk Consultant at Tata Consultancy Services (TCS).  He has 6 years of experience with EAI and ETL technologies. He is specialized in Microsoft BizTalk Server 2006 - 2016, Microsoft Azure, Business processes (EAI / B2B, ETL & BPM), Microsoft .NET Framework & ESB and SOA solutions. He enjoys supporting the BizTalk Community through continued participation on the MSDN and TechNet Forums. He is an individual who can wear many hats in the application life cycle, but has a focus on design and development, with the goal of becoming more of an Architect. 
Microsoft awarded him the prestigious Azure MVP of the year 2016 for his outstanding contribution to the Microsoft BizTalk Server community.

One applaudable thing is that Rachit is been top answerer on MSDN forums:



Let's begin the interview.....

Mahesh: Who are you and what you do? 
Rachit: My name is Rachit Sikroria. I am based in Gurgaon, India where I serve Tata Consultancy Services as a Senior BizTalk Consultant, specialized in Integration and Cloud technologies on the Microsoft technology platform. I have had the opportunity of working in many exciting industries such as Commercial Aviation, Banking, Finance & Energy and Utilities.

Mahesh: When did you start working on BizTalk?
Rachit: It was 31st Jan, 2011 when I was hired by a consulting firm. I was a novice at that time with only a training of a fortnight. I was then assigned a project for one of our clients where I started learning and exploring with BizTalk Server 2006.
Throughout my career, I have been opportune to work on latest technologies with a lot of sleepless and tough yet exciting moments in service.


Mahesh: How did you Master BizTalk Server?
Rachit: No one can really master BizTalk. It is just that we can become better and better with every successive project. In the initial years of my career, I was required to read a lot of books and blogs but with time I realized that reading is not enough, it is important that one should start practically implementing things too. So, what counted as actual learning for me were the real situations that I bumped into almost every now and then. My knowledge came through the success that I found in those hit and trials.
Also, throughout my career I got the opportunity to work with different Industries with different integration requirements which helped me gain the expertise while working out the best fit solutions.
At this stage of my career I can say one thing about BizTalk, that, I live it, breathe it, and absolutely love it.

Mahesh: What are your major projects?
Rachit: I have completed 2 major projects which lasted for a year each. One of them was for a well-known financial company where we had to bridge the front-end website with the back-end systems and help in building their middleware/BPM platform using BizTalk Server.  The other was for one of the major airlines of UK where we had to setup their Booking and E-Ticketing system. 
These two have been the most demanding and inspiring projects I was involved in so far where we faced challenges in removing blocking issues, and satisfying low-latency requirements by implementing different design patterns within the stringent SLAs. 
I also got a chance to integrate BizTalk with different software packages like SharePoint, SAP, Oracle, SQL and CRM Dynamics. 

Mahesh: How you compare BizTalk with other Integration products? 
Rachit: I have not used any other integration platform so far. Therefore, I can’t really compare! But I can surely say that BizTalk Stack (BizTalk Server, Windows, SQL Server, Visual Studio, .Net, SharePoint, IIS) is much more than just a BizTalk Server. You can do a lot more with BizTalk than any other offering. 
Another advantage is of course the encouraging community support we have. 

Mahesh: What as per you is a must to know to become an Integration (BizTalk) expert.
Rachit: Fore-mostly, the professional should have a passion for technology and BizTalk/Integration in particular. The second is the skill to analyze the requirement and have the capability to decide when to use BizTalk and when not to. We come across a lot of questions on the MSDN forum where professionals have implemented BizTalk instead of the ETL tool like SSIS that was more suited.  
Not to forget in today's cloud-enabled world, it is important that the experts should evolve with the new offerings. With the recent release of BizTalk Server 2016, we can now connect both traditional on-premises applications to cloud-native applications seamlessly. We have BizTalk Azure VMs available to move our on-premises setup to cloud as well. So, there is a lot to explore and as an integration expert, one should be ready to stay abreast of the latest technologies.

Mahesh: What are your thoughts on the forums, blogs and articles etc.?
Rachit: I think that the existence of platforms like Microsoft MSDN Forums, Blogs, Code Gallery, and TechNet Wiki have played a crucial role behind the success of Microsoft technologies. They are sources of readily available expertise and you get solutions for most of the issues in just few clicks over the Internet. 


Mahesh: Your suggestion to a newcomer? What should be their approach to get sound knowledge in BizTalk?
Rachit: I always say that Knowledge is no fortune that happens through a windfall gain. One gets in the cycle of learning, remembering and sharing and it is a long-devoted process. Work with lots of learned techies, read and observe. Like in any other discipline, start with the basics and in case of severity, come back to them. Chances of failing minimize if one has a strong base knowledge. Perfection comes later!
For one stop shop for BizTalk, I would refer the following link. This link holds all the excellent articles written by MVPs and other BizTalk Community members across the globe.
http://social.technet.microsoft.com/wiki/contents/articles/2240.biztalk-server-resources-on-the-technet-wiki.aspx

Mahesh: There are many tools from community which support BizTalk in one or the other way (like BTDF, Bizunit etc), what do you say about it? Which ones you would recommend? Why?
Rachit: I would say that they all are life savers. Tools like BTDF, BizUnit, BizTalk Server Pipeline Component Wizard, BizTalk CAT Instrumentation Framework Controller, BizTalk Mapper Extensions UtilityPack and many more are highly useful tools.

Mahesh: What are your thoughts about BizTalk certification?
Rachit: If I were to choose, I would rather prefer a professional having Microsoft Forums and Technet contributions listed in his/her resume than a certification. The former reflects more about the person’s capability and penchant.

Mahesh: What is the future of BizTalk?
Rachit: People keep asking question like “Is BizTalk Server Going Away at Some Point”, “Does Microsoft BizTalk Server Have a Future?” and “Is BizTalk dead?”. My answer to them is NO, BizTalk is not dead, it is very much alive and kicking. BizTalk server is still the best on-premises integration platform available, and it is not changing anytime soon. Microsoft is still committed to release a new version of BizTalk Server around about every 2 years. BizTalk and Logic apps, both are integral part of Microsoft integration roadmap. With the release of a new Logic Apps adapter for BizTalk and the BizTalk Connector for Logic Apps the integration between BizTalk Server and Logic Apps is fulfilled.


Mahesh: What motivates you to do the community work?
Rachit: For me, the highest compliment is to see people finding their solutions through my answers. I am in awe of other contributors who have achieved intellectual zenith. The biggest motivation is that this community work has helped me both, share and receive knowledge. So, when I am answering someone’s question, I’m also learning the many things I am ignorant of. Recently, I even started sharing code samples and writing Wiki articles. 


Mahesh: Being an MVP, do you feel that responsibilities get added? What is your thought on MVP?
Rachit: May be not a responsibility, but it is definitely an impetus to do more in this field. To learn that Microsoft recognizes our efforts, a virtual leadership is created in us that makes us go on and on with our services. MVP award has given me that extra connection with the Microsoft Product team and it leads to professional growth. Being a part of the Private mailing-list that has all Azure MVPs together and several Microsoft employees too (including members of the Azure team), is like a dream come true! I am now offered invitations for all the webcasts and tech session which keep me abreast of the latest progress in Microsoft technologies.


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? 
Rachit: Honestly, this strategy left me quite disappointed too, it seems a little attention was paid to MABS by the product team. Now that MABS is being phased out in favor of Logic and API Apps, and rightly so, as MABS never had the full capabilities of BizTalk Server. For example, you don't have orchestrations/long-running workflows, there was no way to have parallel and conditional execution, No in-built business process management capabilities or business rules engine. It was just good for lightweight integration scenarios at best.


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

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






Related Post:



Wednesday, November 23, 2016

How to install BizTalk Health Monitor v3.2

In previous version of BHM, you had to register the MBVSnapIn.dll 🙂

Here are the steps:

  • Open a command prompt as an administrator
  • Navigate to the BizTalkHealthMonitor folder
  • Run InstallUtil.exe MBVSnapIn.dll


And followed by adding it to MMC, but this is lot simplied in version 3.2 .

Following is the Link to download setup file:
https://www.microsoft.com/en-us/download/details.aspx?id=43716



download page

After download, unzip the package to your preferred location – I have unzipped it in 

unzipped files

Click on BHMSetup and Run as Administrator

BHM Setup

You will see Installation page
BHM installation start page

Click on Start Installing 

BHM installation start page1

In few seconds you will see installation is completed

BHM installation start page installation complete

As can be seen I have checked all the check boxes, you can uncheck based on your preferences. I clicked on Exit and following error popped out
BHM Error

This is a known issue with Windows Server 2012 and Windows 10 and to resolve this issue, steps are mentioned in the error page (see above).
MYHCQueries

Click on properties and  go to General Tab
MYHCQueries Properties----> MYHCQueries Properties1

You see against Security the Unblock button, we need to click on it.


Same process has to be followed for MaintenanceRep.dll

MaintenanceRep MaintenanceRep properties

Now repeat the initial step of installation and after installation now you should be able to see following, BizTalk Health Monitor MMC having BizTalk Server Administration and Event Viewer (it is because we had checked the option to include while installation)

BHM profile

As I installed it on my personal demo machine, only one profile is shown, click on Analyze Now
BHM Dashboard
On the Dashboard you can see the current analysis report and in case you want to analyse later sometime -- you can simply right click and choose Analyze now

BHM Dashboard Analyse now


Note that whenever you run Analyzer, log for that is maintained as can be seen in image below(marked in yellow)

BHM Report








Thursday, November 17, 2016

How to get Retry Count of Successful sent attempt -Two way Scenario

In the last post we saw how to get retry count of successful attempt of transmission in one way scenario, there we used Delivery Notification property of logical send port where NACK actually generates Delivery Failure exception, but that property doesn't work with web service call i.e. request- response port.

Why?

In case of two way port the "Delivery Notification" is implicit in the Receive Operation, so either you receive a service response message or an error message thus completing the call i.e. confirming Delivery. 

But what if the service you are calling is stopped or unavailable temporarily? Do we get Delivery Failure exception? 

To demonstrate what exception we get and how to get Retry count of the successful attempt in case of webservice call, have created very simple WCF Service with four methods and deployed it on the same machine, followed by consuming it using BizTalk WCF consuming Wizard.

WCF service code



published webservicebrowsing the service








How to do 



Scenario:


The scenario is simple, you have to invoke a Add method of HelloWordWCFservice and if there is failure then retry has to be done and log the retrycount when service call was successful.




Input schema 

input schema

Output schema and generated files by wizard

artifacts generated by Consuming wizard

Creating Orchestration


Orchestration with retry logic

The steps remain same as demonstrated in earlier post,the change here is we have request-response port, one send port where the response message from service call and have included following exception blocks 

exception blocks


Here if you see, I have placed the exception blocks based on relevance, of most likely exception to be raised.

Testing



1. Service is up and running


In this scenario, the call was successful and the response message was saved at the configured folder.


event log for successful transmission

2. Service is stopped with Retry count set to 3 and retry interval set to 1 minute (Service started after 1 minute)


event log for exception caught

As can be seen above the type of exception raised was Soap Exception when the service was stopped and we get the RetryCount of the successful attempt i.e. 1 when service started.

Note: The Delivery Notification property(either None or Transmitted) has no effect on the behavior


Download Sample



Wednesday, November 16, 2016

How to get Retry Count of Successful sent attempt - One way Scenario

There is a provision in BizTalk to set Retry Interval and Retry Count for both scenarios i.e. Static and Dynamic. For static we set it on the send ports and in case of dynamic we set the context properties in Orchestration/Pipeline.

But, I found no where or no way to get the Retry count of the successful attempt - when message was successfully delivered to destination system/service. If anyone knows, please let me know in comments :) .

So what if there is need to get that Retry count, say if business team wants to track and log it. 


How to do

To explain the process will use simple scenario file routing as below

Scenario: 


We receive files at a folder which is to be routed to different folder and in case of transmission failure there has to be retries done for every minute but only three times and log the retry count when transmission was successful.

To implement this I have used Orchestration, where I receive a file and send it as it is inside a scope with transaction type set to None and an excpetion handler to catch Delivery Failure exception.

Creating Orchestration

Orchestration with retry logic

Here we are not going to use the Retry mechanism provided by BizTalk, instead we build custom Retry logic with help of two variables, Loop Shape and Delay Shape.

Var_RetryCount and Var_RetryInterval are variables set in orchestration (hard coded just for the post, ideally it should be configurable like SSO application/Config files or DB).

Retry count variable declaration
                     retry interval variable


The logical send port has Delivery Notification set to Transmitted, doing this makes orchestration to wait for an acknowledgement from physical send port - ACK/NACK. If transmission goes ok then positive ACK is received  and if something goes wrong then exception is thrown to orchestration which is caught by exception handler (provided exception handling is implemented).
Delivery notification on logical port

Question might arise, what happens if Delivery Notification is set to None on the Logical send Port and address is incorrect.

The message is sent and the flow continues and process ends as successful,no exception is caught even though Exception handler is there(read no exception raised), but there is error logged in Event Viewer. 


The system cannot find the path specified

It is perfectly valid behavior as the orchestration is not set to hear back from Send Port.In this case Orchestration is instructed to submit message to Message Box (to which the send port has subscription) and continue to check if exception occurred, if not then write entry to event log.

The logic here is, the Loop shape here is going to do retry based on Var_Retrycount(number of times).
Loop counter

And Delay shape is to induce the interval between the retries based on Var_RetryInterval.

retry interval in Delay


And to decide whether retry is to be done is based on Var_ExceptionOccurred, which gets set to true in Exception block whenever exception is encountered.

Exception occurred flag set to true


check if exception occurred

If exception occurred, then we just increment the loop counter, wait for the delay set and control is given back to loop shape for another retry(provided retry count is not reached).


Increment loop counter



 And if no exception i.e. the transmission was successful, then the Var_SuccessRetryCount is set to loop counter and Loop counter is set to Var_RetryCount+1 so that no more retry is done. 
set success retry countSo when Var_SuccessRetryCount is zero it means no retry was done and transmission was successful, when it is one - means transmission was successful at 1st attempt of retry and so on.



Testing



1. Correct address

In this scenario, the input file was successfully dropped to the destination folder

2. Incorrect address with Retry count set to 3 and retry interval set to 1 minute (address corrected after 1 minute)


incorrect address

 As can be seen in below image, there was delivery exception and current retry count and when will retry done is logged to event log, same happens to next retry also
current retry count

Then after I correct the address 


correct retry count

Thus, message was sent successfully at second retry .

Message sent successfully at retry count


file at destination


So now we have the RetryCount when transmission was successful.



Download Sample

Related Post



Saturday, November 12, 2016

Schema generation failed.Message User canceled out of save dialog

I was to generate schema from Stored procedure, thus used Consume Adapter Service wizard -- selected the SP and while the process of adding it,got below error

"Schema generation failed.Message User canceled out of save dialog "




Schema generation failed


Why it happened

From the error details it was not clear as it says User cancelled out of save dialog. Was wondering why would it say so when I didn't cancelled explicitly, then I realized that I have opened Visual studio directly and not as an administrator :) .



What to do

In case, you too face same problem then save whatever changes you have done and close the current visual studio instance. Now reopen visual studio and this time use Run as administrator.


Monday, November 7, 2016

How to setup and schedule BizTalk performance Counters in PerfMon

After you are done with BizTalk application development and unit testing, applications are tested for range of load(Load testing is not mandatory,it depends the business scenario),to see how application behaves and how it performs.For loadTesting we can use SOAPUI/LoadUI which would genarate variations of load at variant time.And to track the application behavior PerfMon is used.

This post is step by step reference for adding BizTalk performance counter in PerfMon to evaluate the performance and generate performance reports which can be shared across business team.


Below are the steps for setting up and scheduling BizTalk performance counters in PerfMon

Step 1: Create custom user defined Data Collector set


Create new Data Collector set

Give it a Name 
Data Collector set name

Select what data you are interested in, for this I only want Performance Counters to be available 
Create data logs


Created Data collector Set

Step 2: Add the counters(which you want to monitor)


Select the DataCollector01 and click on Add button

Add the performance counters

As can be seen below, there are four counters available for BizTalkMessagingLatency category, you can either select particular counter or all of them and then click on Add button
Select BizTalk performance counters

There are more BizTalk related counters which you can select (for this post I have selected only one) refer : BizTalk Performance Counters    and also included Processor counters
Select Processor counters

Step 3: Select the interval for which you want to collect data

select the interval for data collection


Step 4:This Data collector can be run manually and also can be scheduled                


To schedule it right click on DataCollector you defined and go to properties->Schedule Tab and click on Add button
Add schedule to data collector


Set as per your requirement

select the beginning time

Data collector schedule

As can be seen  above Data collector is set to start at 12:00 AM but there is no stop time, to set stop time click on StopCondition Tab

set the stop condition

Step 5: View the reports

To view the report, go to Reports and select the DataCollector which you created.

view the reports