2010-12-09 41 views
0

J'ai un service WCF singleton qui possède des sockets utilisés pour communiquer avec une partie externe. J'utilise .NET 3.5 SP1Le service WCF avec singleton n'accepte qu'un seul client concurrent

Le code est thread-safe et évolue bien.

Lorsque j'exécute ce code dans un service WCF hébergé dans IIS 7.5 sur Windows 2008 R2 64 bits, le service WCF ne peut pas accepter plus d'un appel simultané.

Ma classe de service implémente trois interfaces, chacune avec un attribut standard ServiceContract et seulement un espace de noms, aucun autre paramètre

je l'attribut suivant la classe:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, 
     ConcurrencyMode = ConcurrencyMode.Multiple)] 

je le comportement suivant configuration:

<behavior name="MyServiceAsyncBehavior"> 
    <serviceMetadata httpGetEnabled="false" /> 
    <serviceThrottling maxConcurrentCalls="60" maxConcurrentSessions="60" 
    maxConcurrentInstances="60" /> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
</behavior> 

J'ai créé une application séparée, utilisé le même fichier de configuration exacte (littéralement une copie, pas chang y a été fait), et une classe de service singleton avec le même attribut ServiceBehavior sur la classe. Ce service N'EXPOSE PAS le même comportement, il permet heureusement des appels simultanés. La seule différence entre le service de test qui autorise les appels simultanés et le service réel qui ne l'est pas est que le service réel possède des threads de travail et des sockets TCP, et implémente trois interfaces au lieu d'une.

Qu'est-ce qui me manque ici?

+0

J'ai trouvé un problème. Cela concerne le service TCP distant. J'utilisais un service de test mal comporté, qui ne revenait jamais à l'appelant. Il est intéressant de noter que WCF a empêché les appels simultanés pendant que le service était verrouillé. Des idées pour lesquelles cela pourrait être? – Joon

Répondre

0

J'ai trouvé le problème. Cela concerne le service TCP distant. J'utilisais un service de test mal comporté, qui ne revenait jamais à l'appelant.

WCF semble avoir empêché les appels simultanés au singleton parce que le singleton a été enfermé dans une boucle serrée