Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF: Service that only allows a single client and rejects others

I need to create a WCF service that only allows a single client at a time. All other requests should be rejected, and the client must retry again later. The service will take around a minute to complete the request.

I've tried:

 [ServiceBehavior(IncludeExceptionDetailInFaults=true,
                  InstanceContextMode=InstanceContextMode.Single,
                  ConcurrencyMode=ConcurrencyMode.Single)]

but if I request the service multiple times (using multiple threads) in a client, I get a timeout exception on the 3rd request, but the service does actually perform the 3rd requests processing!

like image 735
user97280 Avatar asked Feb 28 '23 19:02

user97280


1 Answers

You could also check out the "ServiceThrottling" behavior, which allows you to specify on the server side how many concurrent instances, concurrent calls and concurrent sessions you want to support - set them all to 1, and you should have your behavior.

<behaviors>
  <serviceBehaviors>
     <behavior name="Throttled">
         <serviceThrottling maxConcurrentCalls="1"
            maxConcurrentSessions="1"
            maxConcurrentInstances="1" />
     </behavior>
  </serviceBehaviors>
</behaviors>

Marc

like image 63
marc_s Avatar answered Mar 05 '23 18:03

marc_s