Simple Thoughts

BizTalk MaxConnections

February 16, 2009 · Leave a Comment

BizTalk enables users to configure WCF host to limit the maximum connections to a particular address.  Through some painful trial an error I was able to get this setting to do what the documentation so easily described.  To help save others from facing similar issues that i had i decided to help a brother out.

    <system.net>

        <connectionManagement>

              <add address = * maxconnection = 2 />

        </connectionManagement>

    </system.net>

The connectionManagement element in the btsntsvc.config file is designed to specify the number of connections to a given address.  By default BizTalk allows for 2 connections for any given WCF host.    If you are calling http://someiishost/MyService.svc and http://someiishost/MyOtherService.svc BizTalk would only allow 2 simultaneous calls to the someiishost address.  As a result as soon as the request hits the send port, even if a connection is not available,  BizTalk starts a send timeout and if a response is not returned in the allotted Send Time Out it cancels the request and starts a retry. 

 What I originally found was that this setting was particularly useful when trying to increase throughput.  I went from only having 2 services instances running at a time, to 10 (because of WCF service throttling).  I increased the wild card * from 2 to 125.  This worked great, but I ran into major issues when trying to use anything besides a wild card.  The documentation states that the address attribute can be any dns or ip address.  For my environment I found this to be false.  I finally came to the conclusion that the address needed to be prefixed with ‘http://.’  I then found a difference between a computer hosted service, and a service hosted through a header.

 

Computer Hosted Service

For accessing a service on a network that is hosted on a computer I found that the computer name was case sensitive, and could not be fully qualified.  So http://MYCOMPUTERNAME , http://MYCOMPUTERNAME.FullyQualifiied.DomainName.com  did not work.  I even ping’ed COMPUTERNAME, computername, computername.fullyqualified.com all of which resolved to the same address.   So my conclusion was whenever a computer is hosting the service the format is “http://computername” (My blowing I know, wait till you see the next issue).  Example computername setting:

     <system.net>

 <connectionManagement>

<add address = * maxconnection = “125″ />

<add address = “http://mycomputername” maxconnection = 2 />

<add address = “http://myheader.domain.com” maxconnection = 4 />

        </connectionManagement>

    </system.net>

Host Header/Load Balanced Service

Ready for your headache?   So I found the solution in our dev environment it was now time to deploy to production.   The main difference between DEV and PROD environment was that the services were hosted behind a load balancer.  As a result we had configured a host header (myheader) for our web site.   I restart the host instances and tested the connectionManagement setting and to my surprise… the throttling setting is not working yet again.  After some more agony I came to find out that the host header had to be fully qualified.   This time the correct address was http://myheader .domain.com .  I do some old school analysis and run ping on myheader and myheader.domain.com get the same IP yet again. 

I still can’t explain why/how the setting was resolving address, but if you are seeing a similar issue, throw all logic aside and try the above.

 

 

Categories: BizTalk · C# · Microsoft

0 responses so far ↓

  • There are no comments yet...Kick things off by filling out the form below.

Leave a Comment