Bonjour à tous,

Avec un même code, juste en changeant le type de binding, j'obtiens des comportement différents.

Soit le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
using (ChannelFactory<IPackageSendingSupervisor> channelFactory = new ChannelFactory<IPackageSendingSupervisor>(ConfigurationManager.AppSettings["PackageSendingSupervisorEndPoint"]))
{
  IPackageSendingSupervisor packageSendingSupervisor = channelFactory.CreateChannel();
 
  foreach (int package in packages)
  {
    try
    {
      packageSendingSupervisor.RestartSending(package);
      Console.WriteLine(string.Format(CultureInfo.CurrentCulture, Resources.PackageRestarted, package));
    }
    catch (Exception e)
    {
      Console.WriteLine(string.Format(CultureInfo.CurrentCulture, Resources.RestartPackageError, package, e.Message));
    }
  }
}
Avec deux éléments dans packages, voici ce que j'obtiens en BasicHttp :

boucle 1 -> catch d'une exception renvoyé par le serveur WCF (c'est voulu, c'est justement ce que je veux tester)
boucle 2 -> ok

avec NetNamedPipe

boucle 1 -> catch d'une exception renvoyé par le serveur WCF (c'est voulu, c'est justement ce que je veux tester)
boucle 2 -> catch d'une CommunicationObjectFaultedException (Message="The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.")

pourtant channelFactory.State est égal à "Opened" quand je rentre dans le catch de la seconde boucle.

Comment me conseillez-vous de coder l'appel pour que le comportement soit identique avec les 2 types de binding sans risquer d'y perdre des ressources.

Par avance, merci pour votre aide,
Tetranos