Friday, February 6, 2015

Hosting WCF HTTP receive location inside BizTalk, without using IIS, performance considerations.

Recently my attention was brought to the fact that you can host a WCF webservice that was generated using the BizTalk WCF Service Publishing Wizard without using IIS. Sam Vanhoutte wrote a blog about that some time ago.

At the end of his blog, he mentioned that one of the advantages is better performance. And then I started to wonder how much the performance increase would actually be...

So I built a very simple quick-and-dirty BizTalk application, used the BizTalk WCF Service Publishing Wizard to create a webservice (hosted in IIS), and created a separate receive location using WCF-Custom. Then I created a small console app that called the service 100 times. And finally I tested it with the IIS-hosted endpoint, and then again with the WCF-Custom endpoint.

The 100 calls to the IIS-hosted endpoint took about 81.3 seconds, the 100 calls to the WCF-Custom endpoint 60.8 seconds... an improvement of about 30%! (I was using some VMs so performance wasn't great... 100 calls in 60 seconds is not something you would like to brag about..)

Obviously the bottle-neck is the performance of the actual orchestration but if you are looking at low-latency scenarios, this might just gain you those extra milliseconds you're looking for...

You can find the code I used here:
BizTalk solution: src (this includes the binding file I used)
Console app: src