Bonjour,
Je suis bloqué sur un problème que je ne m'explique pas lors de l'interuption d'un service inattendu. La coupure du channel me lance une CommunicationException mais ne lève pas l'event Faulted...
Voici le contexte pour re-situer le problème :
1 - Je déclare ma variable recevant le channel avec une méthode de déconnexion :
2 - Je crée un channel en attachant une méthode gérant la déconnexion à l'event Faulted :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class MyProxy : RealProxy, IDisposable { private IMyService _client; ... private void Disconnect(object obj, Exception reason) { _client = null; } }
3 - Je fais l'appel à la méthode de mon service :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var factory = new ChannelFactory<TContract>(ep); factory.Faulted += (sender, e) => Disconnect(sender); _client = (IMyService)factory.CreateChannel(); ((IClientChannel)_client).Faulted += (sender, e) => Disconnect(sender);
4 - Je me mets pause via un break point dans l'implémentation de la méthode de mon service et je le stop : Normalement ça devrait déclencher changer le state du channel et le mettre en Faulted mais non, il reste en Opened et donc n'appel pas ma méthod "Disconnect". Ce qui est étrange, c'est que je récupère bien une exception "CommunicationException" avec le message classique "Endpoint not found" ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 try { using (new OperationContextScope((IContextChannel)channel)) { var res = mcm.MethodBase.Invoke(channel, args); } } return; } catch (Exception error) { return; }
Si quelqu'un avait une idée du pourquoi ?
Partager