35349

WCF Service calling an external web service results in timeouts in heavy load environment

Question:

I have got the following scneario:

Our .NET client calls our WCF service - which in turn calls an external third party service to retrieve some data. Once the data is retrieved, our WCF service sets some values and then returns the control back to the client. The process of calling the external service has to be synchronous.

My problem is that this all works in a low load environment but when load gets high then we start queueing multiple requests, the WCF service starts timing out. We have set the "sendTimeout" property for the binding to 5 seconds and it times out after that.

I've tried replacing the external service with a mocked out local version and that handles the load OK but on the same hand the call to external service on it own is very quick - around 0.5 second. I can only presume that the timeouts are happening because too many requests were queued and WCF service couldn't respond within those allocated 5 seconds.

I have tried the following:

<ul><li>Set the values of maxConcurrentCalls, maxConcurrentSessions & maxConcurrentInstances to very high numbers</li> <li>Set the value of system.net - connectionManagement - maxconnection to a very high number</li> </ul>

Does any one have any ideas about what we can do in this scneario?

Answer1:

does your cpu peak during these high load times ? if not then you might be running out of threads. Make your wcf service that receives the original call asynchronous, and then call the external service asynchronously.

you will have to use asnyc pattern throughout your call chain to make sure nothing is blocking the thread.

<a href="http://msdn.microsoft.com/en-us/library/ms731177.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms731177.aspx</a>

Recommend

  • jQuery animation without queuing
  • Building a high performance and automatically backupped queue
  • What is the purpose of Google Cloud Messaging
  • C Pthreads - issues with thread-safe queue implementation
  • How to have a blendable project using MVVM-Light and WCF RIA Services
  • What is the preferred way to compose a set from multiple lists in Python
  • How do js animations work?
  • Optimising asyncronus HttpClient requests
  • Why does the first run of “XCTestCase -measureBlock:” takes so much time?
  • Generating random numbers directly inside a .htaccess file
  • Get rendered html code in Backing Component from Composite Component
  • Watson Conversation - Why is the ANYTHING ELSE node not chosen
  • Local Development, Apache vs Developer - file permissions
  • File extension of zlib zipped html page?
  • How to skip require in ruby?
  • Saving image to sd with current date and time in name doesn't work
  • C# program and C++ DLL compiled for 32-bit system crash on 64-bit system
  • Loading .coffee files via a view in Rails
  • why xml file does not aligned properly after append the string in beginning and end of the file usin
  • Create DicomImage from scratch using Dcmtk
  • Yii2: Config params vs. const/define
  • Python CGI os.system causing malformed header
  • Repeat a vertical line on every page in Report Builder / SSRS
  • Android screen density dpi vs ppi
  • Bug in WPF DataGrid
  • How to make Safari send if-modified-since header?
  • Web-crawler for facebook in python
  • Jquery - Jquery Wysiwyg return html as a string
  • 0x202A in filename: Why?
  • Confusion with PayPal's monthly billing cycle
  • using conditional logic : check if record exists; if it does, update it, if not, create it
  • python regex in pyparsing
  • How to set the response of a form post action to a iframe source?
  • Change div Background jquery
  • Android Google Maps API OnLocationChanged only called once
  • Qt: Run a script BEFORE make
  • reshape alternating columns in less time and using less memory
  • java string with new operator and a literal
  • How can I use threading to 'tick' a timer to be accessed by other threads?
  • How to load view controller without button in storyboard?