Question

Nous avons un serveur singleton distant fonctionnant dans un service Windows distinct (appelons-le RemotingService).Les clients du RemotingService sont des instances ASP.NET (très nombreuses).

Actuellement, les clients appellent à distance RemotingService et se bloquent pendant que l'appel RemotingService est traité.Cependant, le service distant devient suffisamment compliqué (avec davantage d'appels RPC et d'algorithmes complexes) pour que les threads de travail asp.net soient bloqués pendant une période beaucoup plus longue (4 à 5 secondes).

Selon cet article msdn, cela ne fonctionnera pas correctement car un thread de travail asp.net est bloqué pour chaque RPC distant.Il conseille de passer aux gestionnaires asynchrones pour libérer les threads de travail asp.net.

L'objectif d'un gestionnaire asynchrone est de libérer un thread de pool de threads ASP.NET pour servir des demandes supplémentaires pendant que le gestionnaire traite la demande d'origine.

Cela semble bien, sauf que l'appel à distance utilise toujours un thread du pool de threads.Est-ce le même pool de threads que les threads de travail asp.net ?

Comment dois-je procéder pour transformer mon serveur singleton distant en un système asynchrone afin de libérer mes threads de travail asp.net ?

J'ai probablement manqué certaines informations importantes, n'hésitez pas à me faire savoir si vous avez besoin de savoir autre chose pour répondre à la question.

Était-ce utile?

La solution

L'idée derrière l'utilisation du ThreadPool est que grâce à lui, vous pouvez contrôler la quantité de threads synchrones, et si ceux-ci deviennent trop nombreux, le pool de threads gère automatiquement l'attente des threads les plus récents.

Le thread travaillé par Asp.Net (AFAIK) ne provient pas du pool de threads et ne devrait pas être affecté par votre appel au service d'accès à distance (sauf s'il s'agit d'un processeur très lent et que votre fonction d'accès à distance est très gourmande en CPU - dans laquelle Dans ce cas, tout sur votre ordinateur sera affecté).

Vous pouvez toujours héberger le service à distance sur un autre serveur physique.Dans ce cas, votre thread de travail asp.net sera totalement indépendant de votre appel à distance (si l'appel à distance est appelé sur un thread distinct).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top