J'ai créé un service simple WCF (.NET 3.5) qui définit 10 contrats qui sont essentiellement des calculs sur les données fournies. Pour le moment, je m'attends à ce que peu de clients apportent un appel à certains de ces contrats. Comment puis-je rendre le service plus réactif? J'ai l'impression que le service attendra jusqu'à ce qu'il traiterait une demande d'aller à la suivante. Comment puis-je utiliser multithreading dans WCF pour accélérer les choses? P>
4 Réponses :
Ceci est définitivement une optimisation pré-mature. Implémentez d'abord vos services et voyez s'il y a un problème ou non. P>
Je pense que vous constaterez que vous vous inquiétez de rien. Le serveur ne bloque pas sur une seule demande en tant que processus de demande. IIS / WCF devrait gérer les choses pour vous gentiment aussi. P>
Je ne connais pas avec WCF, mais le processus peut-il être asynchronisé?
Si vous attendez une énorme quantité de données et de calculs intensives, une option pourrait être d'envoyer un quelque chose comme: p> ID code>, calculez les valeurs dans un thread séparé, puis fournissez une méthode pour renvoyer le résultat à l'aide du code initial ID code>.
Alors que je suis d'accord avec la réponse Justin, je crois que certains peuvent plus de lumière être versé ici sur la façon dont fonctionne WCF. p>
Vous faites la déclaration spécifique: p>
J'ai un sentiment que le service
attendre jusqu'à ce qu'il traite une demande de
aller à la suivante. Comment puis-je utiliser
multithreading WCF aux choses de vitesse
up? p>
blockQuote>
Le service d'accès concurrentiel (combien d'appels peut prendre simultanément) dépend de la Cependant, cela pourrait ne pas être autant d'une question que vous pensez. Si votre service est Si vous avez un singleton ou un objet de service par session, cependant, alors les appels à cette instance de la mise en œuvre de services sera publié en feuilleton. P>
Vous pouvez toujours modifier le Il est important de ne pas changer simplement parce que ceux-ci vous pensez em> que cela conduira à une performance accrue. Bien que pas tant pour la concurrence, l'instanciation aspect de votre service est très bien une partie de l'identité du service (si elle est ou non la session par session) et en les modifiant un impact sur les clients consommant le service, donc ne pas faire légèrement. p>
Bien sûr, cela ne parle que de savoir si oui ou non le code qui est en fait la mise en œuvre em> le service est efficace. C'est certainement quelque chose qui doit regarder dans, lorsque vous indiquez tel est le cas. P>
ConcurrencyMode code> valeur attaché au service. Par défaut, cette valeur est ServiceBehavior code> ConcurrencyMode.Single code>, ce qui signifie, il sérialisation des appels les uns après les autres. P>
InstanceContextMode code> a> est égal à InstanceContextMode.PerCall code> alors c'est pas un problème; une nouvelle instance de votre service sera créé par appel et non utilisé pour d'autres appels. p>
ConcurrencyMode code>, mais sachez que si vous le faites, vous devrez gérer les problèmes de concurrence et de l'accès à vos ressources manuellement, comme vous l'avez dit explicitement WCF que vous le ferez . p>
Par défaut, l'instanciation est Toutefois, si vous utilisez une liaison de session qui ne prend pas en charge les sessions (comme BasichttpLinding) ou que le canal / client ne crée pas de session, cela se comporte comme Voir [Support de session de type de liaison] ( HTTPS : //docs.microsoft.com/en-us/dotnet/framework/wcf/system-Provided-bindings ). p>
Chaque objet client WCF créera une session et pour chaque session, une instance de serveur dispose d'une instance de serveur avec un seul thread qui conserve tous les appels de cet objet client de WCF particulièrement synchrone. P>
Plusieurs clients auraient donc chacun leur propre session et donc une instance de serveur et un thread par défaut et ne se bloqueraient pas.
Ils ne s'affronteront que sur des ressources communes telles que la DB, la CPU, etc. P>
voir Utilisation de sessions P>
Comme les autres suggéraient que la mise en œuvre est efficace avant de commencer à jouer avec les modes de montage et de concurrence. P>
Vous pouvez également envisager des calculs côté client s'il n'y a pas de raison réelle de faire appel au serveur. P> la perspession code>.
Voir par défaut de service WCF p>
percall code> P>
Je comprends bien que vous soyez bien quand je dis que vous rencontrez des réponses lentes? Combien d'appels un client effectue-t-il par laisse la minute. Et qu'est-ce qui est lent?