2009-09-14 6 views
3

J'ai un client WCF pour envoyer une requête à un service. Et mon code d'entreprise appelle l'API client pour envoyer plus de 300 requêtes par seconde. Mais mon client envoie seulement environ 50 au service selon les compteurs de performance de mon service et WCF ServicePoint.Pourquoi mon client envoie-t-il une demande si lentement?

Et j'ai augmenté ServicePointManager.DefaultConnectionLimit à 1000 dans le code, et a mis maxConCurrentCalls à 1000 dans le fichier de configuration de service, mais a obtenu peu d'amélioration.

Je suppose qu'il peut y avoir une file d'attente dans le client WCF pour les demandes à envoyer. Y at-il un moyen de le configurer et d'accélérer mon client.

Voici ma configuration pour le client:

<basicHttpBinding> 
    <binding name="Binding" closeTimeout="00:01:00" openTimeout="00:01:00" 
     receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferSize="2000000" maxBufferPoolSize="524288" maxReceivedMessageSize="2000000" 
     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
     useDefaultWebProxy="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
+0

Un simple test serait de démarrer deux clients simultanés et voir si elles produisent des hits à deux fois le taux sur le serveur. Si c'est le cas, c'est un problème de limitation du client. – TheJacobTaylor

+0

J'ai trouvé la raison. Il existe une limitation de thread (50) définie par IIS 6.0. Une solution à ce problème est d'héberger mon service avec un hôte personnalisé. –

Répondre

1

Vous pouvez atteindre la limite de connexion pour out going connexions http:

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

Notez la valeur par défaut est 2.

+0

Est-ce la même chose que ServicePointManager.DefaultConnectionLimit? Je l'ai mis à jour à 1000 dans le code. –

+0

Je ne pense pas que ce soit la même chose. Essayez de mettre la configuration ci-dessus dans le fichier de configuration de votre client wcf. –

+0

définit ServicePointManager.DefaultConnectionLimit à 8 (dans mon application .NET 4 de toute façon), donc ils semblent être les mêmes. –

Questions connexes