2010-03-16 6 views
18

J'ai un service WCF déployé dans une application de console avec BasicHTTPBinding et SSL activé. L'attribut suivant est défini ainsi:Restriction de service WCF

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

J'ai également définir le comportement d'étranglement à

<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647" 
     maxConcurrentInstances="2147483647" /> 

D'autre part, j'ai créé un client de test (pour le test de charge) qui initie plusieurs clients simultanément (plusieurs threads) et effectue des transactions sur le serveur. Tout semble bien, mais sur le serveur, l'utilisation du processeur n'augmente pas. J'ai donc ajouté un enregistrement pour voir le nombre d'appels simultanés au serveur et constaté qu'il ne dépassait jamais 6.

J'ai examiné le code de journalisation du compteur de performance plus que deux fois et cela me semble bien.

Donc, je veux demander où est le problème dans cette situation? Je n'ai pas encore spécifié de type ContextMode ou ConcurrencyMode. Après ce message, j'ai remarqué que chaque fois que je commence un autre Intance of Test Client, le compteur d'appels serveur simultanés passe à 2, comme si je n'exécutais qu'une instance, le maximum d'appels Rcvd simultanés sera 2 et s'il y en a deux la valeur va à 4 et ainsi de suite. Y at-il une limite de nombre d'appels WCF d'une fois le processus?

******** Ajouté le sur la même machine 17-Mars ********

Aujourd'hui, je courais un autre test avec un client de test (avec 50 utilisateurs simultanés) sur lequel le serveur est en cours d'exécution. Cette fois-ci, j'obtiens le résultat exact de ce que je voulais qu'il montre (c'est-à-dire le nombre maximal d'appels simultanés Rcvd par serveur = 50).

Mais je dois faire la même chose sur d'autres machines. Quelqu'un peut-il m'aider à ce sujet?

Répondre

18

J'ai trouvé une solution: il y a une limite de connexion sur ServicePointManager à l'origine de ce problème. Pour supprimer cette limite, vous avez juste besoin de mettre

System.Net.ServicePointManager.DefaultConnectionLimit = X; 

où la limite par défaut est 2.

+4

De @JuliaS: Où allez-ce que la ligne? S'agit-il d'un paramètre de service client ou WCF? –

+1

Désolé pour la réponse en retard: cela va à n'importe quelle application .net qui rend plusieurs connexions sortantes simultanées à n'importe quel serveur. –

22

Ou utiliser cette configuration dans le client.

<system.net> 
    <connectionManagement> 
     <add maxconnection = "200" address ="*" /> 
    </connectionManagement> 
    </system.net> 

Voici 200 est la limite du client

+0

Il est décrit ici http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx et peut-être que vous avez besoin de savoir ceci http://support.microsoft.com/kb/969189 –

+0

MSDN: [ élément (Paramètres réseau)] (https://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx) –

+0

J'ai ajouté maxconnection = "100" adresse = "*" mais pas de chance d'obtenir une erreur de délai d'expiration dans WCF –