Partage
  • Partager sur Facebook
  • Partager sur Twitter

WCF - Définir un timeout côté client

    12 juin 2011 à 17:54:05

    Bonjour,

    dans le cadre d'un projet informatique, j'utilise le WCF. J'ai donc un client et un serveur qui tourne sur un service Windows. Le principe étant créer une tâche planifiée sur le serveur. Le protocole utilisé est HTTP (qui s'appuie sur TCP).

    Je souhaite définir un timeout pour le client, qui va donc permettre de ne pas attendre longtemps si jamais le serveur ne répond pas. Je n'utilise pas de fichier de configuration (app.config). Je souhaite donc définir le timeout en code.
    Le problème est que je ne sais pas comment.

    Voilà la partie de mon code pour me connecter au serveur :
    EndpointAddress myEPA = new EndpointAddress("URI du serveur"); //point de terminaison
    
                    BasicHttpBinding myBinding = new BasicHttpBinding();
                    myBinding.CloseTimeout = TimeSpan.FromMinutes(1);
                    myBinding.OpenTimeout = TimeSpan.FromMinutes(1);
                    myBinding.ReceiveTimeout = TimeSpan.FromSeconds(5);
                    myBinding.SendTimeout = TimeSpan.FromMinutes(1);
                    IserviceWCF delegataire = ChannelFactory<IserviceWCF>.CreateChannel(myBinding, myEPA);
    


    Je ne suis absolument pas sûr, et comme ça ne fonctionne pas, j'ai donc évidemment un souci :D
    Et le fait que je change chaque valeur des timeout ne change rien.

    Une aide me serait donc très utile.

    En vous remerciant d'avance.

    Yannick
    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2011 à 19:41:22

      Il faudrait que tu sois plus précis sur deux points (ces infos manquaient déjà dans ton post précédent):

      1) "Je souhaite définir un timeout pour le client, qui va donc permettre de ne pas attendre longtemps si jamais le serveur ne répond pas." -> Ca ne dit pas vraiment dans quel cas tu veux que le timer se déclenche. Au moment de la connexion ? A chaque requête ? Après un certain temps d'inactivité ?

      2) "ça ne fonctionne pas" -> Quel est le comportement observé et en quoi ne te convient-il pas ? J'ai cru comprendre (toujours dans ton post précédent) que le code lançait pourtant bien une exception après un certain temps sans réponse :o
      • Partager sur Facebook
      • Partager sur Twitter
        12 juin 2011 à 19:46:28

        1. Au moment de la connexion.

        2. En gros, que je définisse les timers ou non, ou que je change leurs valeurs, le temps d'attente est toujours le même, et il est trop long, sinon je ne chercherai pas à raccourcir ce temps d'attente.
        J'ai bien une exception comme quoi ça n'a pas répondu à l'adresse machin, mais le temps que ce message s'affiche est trop long (entre 15 et 20 secondes), et c'est trop long. J'aimerais raccourcir ce temps à moins de 5 secondes par exemple.
        • Partager sur Facebook
        • Partager sur Twitter
          12 juin 2011 à 19:54:16

          Et écrire

          myBinding.OpenTimeout = TimeSpan.FromSeconds(5);
          

          ne change donc rien à ce temps d'attente ? :o
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2011 à 10:41:03

            Absolument pas.
            Et ce que je mette 5 secondes ou 1 minute pour tous les timeout.
            Le temps est toujours aux alentours d'une vingtaine de secondes avant d'avoir une exception disant que le serveur n'a pas répondu.
            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2011 à 6:47:39

              Hum, ça bloque sur l'appel à CreateChannel() ? Si c'est le cas, tu pourrais essayer d'appeler ChannelFactory.Open() explicitement (avant le CreateChannel()) en passant un TimeSpan pour indiquer le délai autorisé.

              http://msdn.microsoft.com/en-us/library/ms405516.aspx
              • Partager sur Facebook
              • Partager sur Twitter

              WCF - Définir un timeout côté client

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown