Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF stops responding after about 10 or so calls (throttling)

I have a WCF Service and an application with a Service Reference to it, and with the application I have a loop and in each iteration it's making a call to a method in this wcf web-service.

The problem is that after about 9 calls or so, it just stops...and if you hit Pause button of VS, you will see that it's stuck on the line where it makes the call.

After some time waiting for it, this TimeoutException is thrown:

The request channel timed out while waiting for a reply after 00:00:59.9970000. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.


I researched a bit on this, and found some solutions that involved editing the app.config in the application, and here are excerpts of it:

<serviceBehaviors>     <behavior name="ThrottlingIssue">         <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" />     </behavior> </serviceBehaviors> 

.

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"   maxArrayLength="2147483647"   maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />  

Then, after I stop debugging, after a couple of minutes, an error message pops up telling me that a Catastrophic failure has occurred.

How can I fix this problem? I did not have this issue when I was working with a normal Web Service.


For reference, here is the whole app.config:

<?xml version="1.0" encoding="utf-8" ?> <configuration>     <system.serviceModel>         <behaviors>             <serviceBehaviors>                 <behavior name="ThrottlingIssue">                     <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" />                 </behavior>             </serviceBehaviors>         </behaviors>         <bindings>             <wsHttpBinding>                 <binding name="WSHttpBinding_IDBInteractionGateway" closeTimeout="00:01:00"                     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"                     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"                     maxBufferPoolSize="524288" maxReceivedMessageSize="65536"                     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"                     allowCookies="false">                     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"                         maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />                     <reliableSession ordered="true" inactivityTimeout="00:10:00"                         enabled="false" />                     <security mode="Message">                         <transport clientCredentialType="Windows" proxyCredentialType="None"                             realm="" />                         <message clientCredentialType="Windows" negotiateServiceCredential="true"                             algorithmSuite="Default" establishSecurityContext="true" />                     </security>                 </binding>             </wsHttpBinding>         </bindings>         <client>             <endpoint address="http://localhost:28918/DBInteractionGateway.svc"                 binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDBInteractionGateway"                 contract="DBInteraction.IDBInteractionGateway" name="WSHttpBinding_IDBInteractionGateway">                 <identity>                     <dns value="localhost" />                 </identity>             </endpoint>         </client>     </system.serviceModel> </configuration> 

[Update] Solution:

Apparently, after each request you have to Close the connection...I am now closing the connection after each request and it's working like a charm.

Although what I still can't understand is that in my app.config, I set my maxConcurrentCalls and maxConcurrentSessions to 500, and yet, I can only make 10. Anyone has any answer for that one? (maybe I have something wrong in my app.config posted above)

The answer for the above question (now dashed) is because I was editing the client app.config, not the service config file (web.config)

like image 688
Andreas Grech Avatar asked Apr 11 '09 01:04

Andreas Grech


People also ask

What is throttling Behaviour in WCF?

Throttling controls place limits on the number of concurrent calls, instances, or sessions to prevent over-consumption of resources. Throttling behavior is specified in service configuration file settings. This sample is based on the Getting Started that implements a calculator service.

How many requests can WCF handle?

WCF service can handle one request at a time.


2 Answers

The default number of allowed concurrent connections is 10.
Most likely your client is not closing the connections.

To increase the number of concurrent calls, you will have to add your behavior to the service configuration, not the client.

like image 162
markt Avatar answered Oct 02 '22 17:10

markt


A call to clientservice.close() will solve the problem.

like image 41
eduardo Avatar answered Oct 02 '22 16:10

eduardo