2009-09-09 6 views
0

Voici mes hypothèses de base:Filetage de serveur Wcf duplex - Où faire des E/S DB synchrones?

  1. WCF exécute mes méthodes d'opération de service sur les threads IOCP (UnsafeQueueNativeOverlapped) au lieu de fils de ThreadPool normaux (QueueUserWorkItem).

  2. Le blocage des E/S doit être et non effectué à l'intérieur des méthodes d'opération de service unidirectionnel.

  3. Le blocage des E/S doit être et non à l'intérieur d'un thread ThreadPool normal.

Je crois que la meilleure stratégie est de appelle async chaîne. Donc, si je reçois un message dans mon service de service unidirectionnel, je fais un appel asynchrone à ma base de données et quand cela se termine, fais mon prochain appel db asynchrone, etc. et finalement réponds via mon rappel wcf ...

Cependant, il est difficile d'effectuer chaque appel de base de données asynchrone. J'ai recouru à la violation des règles 2 et 3 ci-dessus, mais je ne l'aime pas parce que je crois que cela va affamer le ThreadPool finalement. Y a-t-il de meilleures stratégies?

J'ai examiné le CustomThreadPool de Jon Skeet, mais je ne suis pas sûr que ce soit la réponse non plus.

Répondre

1

Je suggère de casser la règle 3 en mettant en file d'attente des appels d'E/S synchrones pour que ThreadPool effectue. Les méthodes de service reviennent tout de suite, mais le travail se fait en arrière-plan, éventuellement en lançant une notification de retour.

+0

Merci pour votre réponse. Ce n'est pas un mauvais compromis à faire, j'en tiendrai compte. –

Questions connexes