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
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.
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).
- 1. XML Reuse Question
- 2. Dynamiquement bâtiment ChannelFactory
- 3. ChannelFactory n'a pas d'adresse sur le noeud final, pourquoi?
- 4. Besoin d'un moyen de fermer un ChannelFactory lorsque le client ne connaît que l'interface
- 5. La propriété Address sur ChannelFactory.Endpoint était null. Le point de terminaison de ChannelFactory doit avoir une adresse valide spécifiée
- 6. Problèmes de forme avec php. Options sélectionnées dynamiquement et case à cocher
- 7. Comment est-ce que ce document est réalisé dans le navigateur?
- 8. Quel est le meilleur moyen de fermer un thread WCF?
- 9. Configuration WCF CustomBinding
- 10. WCF Peer to peer causerie
- 11. Variables PHP passées incorrectement à MySQL
- 12. Créer dynamiquement un type générique pour le modèle
- 13. Comment configurer les clients pour un service wcf?
- 14. Client minimal prenant en charge la sécurité au niveau des messages sur l'interface de canal
- 15. Un canal ouvert est-il nécessaire pour la communication duplex?
- 16. Comment appelez-vous le préprocesseur Visual Studio à partir de la ligne de commande?
- 17. Comment insérer dans NHibernate DB après la session NHibernate
- 18. fenêtres WCF erreur de sécurité d'authentification
- 19. Comment renvoyer une référence à une interface à partir d'un contrat WCF?
- 20. WCF: Usurpation d'identité client
- 21. Comment puis-je lire le code d'état HTTP personnalisé à l'aide de WCF REST?
- 22. php inside javascript - No Contents found
- 23. Façon correcte de mapper les lignes de boîte combo à leurs objets de stratégie correspondants?
- 24. Ant et la tâche disponible - et si quelque chose n'est pas disponible?
- 25. WCF RequestChannel; Que se passe-t-il vraiment?
- 26. Problème d'incompatibilité de contrat WCF
- 27. caractères spéciaux ne présentant pas à la page
- 28. Audit basé MySQL Trigger journalisation avec des comparaisons
- 29. Redimensionner un objet de forme
- 30. Clozure Common Lisp - Programmation de socket TCP - Envoi d'une réponse