aidez-moi à résoudre ce problème.Besoin d'un moyen de fermer un ChannelFactory lorsque le client ne connaît que l'interface
J'ai un client utilisant WCF. Je ne veux pas que ce client sache qu'il obtient ses données d'un service. Je veux utiliser un modèle comme celui-ci, donc il m'est plus facile de tester le code un par un et de remplacer plus tard l'implémentation de l'interface donnée. Le problème avec ce modèle est que je ne suis pas en mesure d'appeler de près sur le ChannelFactory. Je ne suis pas sûr que j'ai besoin d'appeler de près, mais ça me semble juste.
Ma question est la suivante:
Quelqu'un sait-il d'un bon modèle pour fermer le ChannelFactory lorsque le client ne devrait connaître l'interface du service? Ou est-ce que le ChannelFactory est fermé par une sorte de magie?
est Ci-dessous un exemple de code que j'espère vous comprendre la question:
static void Main(string[] args)
{
ITestService service = GetTestService();
Console.WriteLine(service.GetData(42));
}
private static ITestService GetTestService()
{
var cf = new ChannelFactory<ITestService>(new WSHttpBinding(), new EndpointAddress("http://localhost:8731/TestService/"));
return cf.CreateChannel();
}
Merci, GAT
Cela ressemble à une bonne solution. Donc, ce que je peux faire est d'avoir ma propre "ServiceFactory" qui contient une chaîne statique. Chaque fois que j'ai besoin d'un canal, j'appellerai CreateChannel() sur ce membre. Et quand l'application est terminée, j'appelle close sur la ChannelFactory. Est-ce que cela semble être la bonne façon de procéder? –
GAT
C'est la bonne façon. Le point principal est que vous ne devriez pas créer une nouvelle ChannelFactory chaque fois que vous avez besoin d'un canal. Il n'y a aucun problème à garder une ChannelFactory active pendant toute la durée du programme. –