2009-04-28 2 views
3

Ich muss einen WCF-Dienst erstellen, der nur jeweils einen einzigen Client zulässt. Alle anderen Anfragen sollten zurückgewiesen werden und der Client muss später erneut versuchen. Der Dienst dauert etwa eine Minute, um die Anfrage abzuschließen.WCF: Dienst, der nur einen einzigen Client zulässt und andere zurückweist

Ich habe versucht:

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

aber wenn ich den Dienst mehrfach (mit mehreren Threads) in einem Client-Anfrage, erhalte ich eine Zeitausnahme auf dem dritten Antrag, aber der Service nicht durchführt tatsächlich die 3. Anfragen Verarbeitung!

+0

Ich glaube, dass diese Einstellungen die Anrufe der Warteschlange zu machen und wird nacheinander ausgeführt werden (da bereits die Dienste hat sie empfangen werden), was Sie brauchen, ist, dass der Aufruf einen Fehler zurückgibt, wenn Ist das ein anderes im Prozess richtig ?. Ich habe ein ähnliches Problem, wo ich brauche, dass ein einzelner Client den WCF-Kanal verwendet und alle anderen Verbindungen mit Fehlercodes abgelehnt werden, die die Einstellungen verwenden, die Sie erwähnten, und die folgende Antwort wird weiterhin die Verbindung zulassen und die Anrufe in Warteschlange stellen. –

Antwort

7

Sie können auch das Verhalten "ServiceThrottling" überprüfen, mit dem Sie auf der Serverseite angeben können, wie viele gleichzeitige Instanzen, gleichzeitige Aufrufe und gleichzeitige Sitzungen unterstützt werden sollen - setzen Sie sie alle auf 1, und Sie sollten Ihre haben Verhalten.

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

Marc

Verwandte Themen