2009-05-15 4 views
3

J'ai lu que la création de ChannelFactory est coûteuse et que, sauf raison technique, il est préférable de réutiliser ChannelFactories lorsque cela est possible, soit en les mettant en cache, soit en utilisant des instances statiques des usines. D'après votre expérience, quelles stratégies de réutilisation ChannelFactory avez-vous trouvées les plus utiles et les plus robustes dans le contexte d'une application ASP.NET?ChannelFactory Reuse Strategies

Répondre

3

Si vous utilisez .NET 3.0 SP1 et plus et que vous n'avez pas besoin d'éléments spéciaux nécessitant la gestion directe des canaux, la meilleure option serait simplement d'utiliser des classes proxy côté client dérivées de ClientBase <T> (comme ceux générés lors de l'importation de services). Ceux-ci mettent déjà en cache l'usine en dessous. Voir here pour les détails.

Si ce n'est pas le cas, alors vous devrez coller l'objet IChannelFactory <T> quelque part, mais vous devez toujours vous assurer que vous gérez le partage de manière appropriée (je ne pense pas qu'il y ait des garanties de la pile d'une usine est thread-safe), mais à part cela, il devrait être assez simple.

1

Darin Damitrov posté une réponse utile autour de la réutilisation des channelfactories ici: -

creating WCF ChannelFactory<T>

J'ai regardé l'utilisation et la performance mémoire dans une application que je travaille récemment. J'ai appliqué la technique qu'il préconisait (en utilisant un dictionnaire pour stocker un ensemble de channelfactories) et j'ai eu une bonne performance avec elle.

Ce que je voyais était que l'instanciation d'un canal peut prendre jusqu'à 70 ms. Si cela se produit beaucoup, cela s'additionne rapidement. À l'heure actuelle, je fais preuve de prudence et je n'ai pas mis en place mon conteneur DI pour servir les mêmes instances des channelfactories pendant la durée de vie de l'application. Au lieu de cela, je les fais vivre pendant la durée d'une seule requête HTTP (dans laquelle il peut y avoir plusieurs appels de service back-end).

Questions connexes