Nous avons développé un canal WCF personnalisé qui communique via IBM Websphere MQ.Pooling du canal WCF personnalisé
Nous avons créé une usine de canal:
public class MqChannelFactory : ChannelFactoryBase<IRequestChannel>
qui retourne les instances de notre chaîne:
public class MqRequestChannel : ChannelBase, IRequestChannel
Connexion au gestionnaire de file d'attente IBM MQ est une opération coûteuse. Actuellement, nous le faisons dans Channel.OnOpen(). En suivant les directives pour l'utilisation correcte des canaux, nous sommes callign ChannelFactory.CreateChannel() chaque fois que nous avons besoin d'un canal, en envoyant le message, puis en appelant Channel.Close(). Nous supposions que ChannelFactory effectuait la mise en commun des canaux, de sorte que lorsque Channel.Close() était appelé, le canal n'était pas fermé mais renvoyé au pool. Mais, à chaque fois que nous appelons ChannelFactory.CreateChannel, un nouveau canal est instancié, et lorsque la requête est envoyée, l'ouverture coûteuse du canal est effectuée. Donc, la question: Quelle est la meilleure approche pour empêcher l'ouverture du canal à chaque demande?
Certaines des options que nous enquêtons:
Y at-il de toute façon par la configuration de préciser que la mise en commun du canal devrait avoir lieu? Devrions-nous mettre en place notre propre mise en commun des canaux dans notre ChannelFactory?
Devrions-nous garder notre canal ouvert pendant toute la durée de vie de l'application, en envoyant toutes les demandes à travers elle? Devrions-nous effectuer l'opération coûteuse (connexion au gestionnaire de files d'attente) dans la fabrique de canaux, que nous mettons en cache pendant la durée de vie de l'application?