views:

90

answers:

1

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!

+4  A: 

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

marc_s