IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

wsDualHttpBinding taille max?


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 15
    Points
    15
    Par défaut wsDualHttpBinding taille max?
    Bonjour,

    J'essaye d'envoyer des données de taille importantes( > 50Mo) via WCF en wsDualHttpBinding. Malheureusement je n'y arrive pas malgré le paramètrage des variables du genre maxReceivedMessageSize,... Je décrit ci-desous ma manip en détail. Merci d'avance pour votre aide.


    J'ai définit un endpoint qui utilise un binding wsDualHttpBinding avec la configuration suivante:

    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
    19
    <binding 
      name="wsDualHttpBindingConfig" 
      closeTimeout="00:01:00" 
      receiveTimeout="00:01:00"
      sendTimeout="00:01:00" 
      bypassProxyOnLocal="false" 
      maxBufferPoolSize="52428800"
      maxReceivedMessageSize="2147483647" 
      useDefaultWebProxy="true">
      <readerQuotas
        maxDepth="32"
        maxStringContentLength="52428800"
        maxArrayLength="2147483647"
        maxBytesPerRead="8192"
        maxNameTableCharCount="16384" />
      <reliableSession
        inactivityTimeout="00:01:00" />
      <security mode="None" />
    </binding>
    Mon client WCF appelle le contrat "ReadServiceTEST" qui lui renvoie un tableau de 12580000 Bytes ( 12.58Mo ).

    Voir le code du serveur WCF ci-dessous:

    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
    19
    20
    21
    22
    23
    public interface MonInterfaceWCF
    {     
            [OperationContract]
            [Extensions.NetDataContractAttribute]
            Byte[] ReadServiceTEST();
    }
    
    
    public class MaClasse: MonInterfaceWCF
    {
      public Byte[] ReadServiceTEST()
      {
                int MaxSize= 12580000;// 12.58Mo
    
                Byte[] result = new Byte[MaxSize];
    
                for (int i = 0; i < MaxSize; i++)
                {
                    result[i] = Byte.MaxValue;
                }
                return result;
      }
    }
    Le client WCF récupère bien ce tableau de Byte si MaxSize = 12580000,
    mais plus si MaxSize = 12590000;// 12.59Mo!!!Le comportement que j'observe est que le tableau de Byte est bien renvoyé côté serveur, mais le client qui est en attente active sur l'appelle de la méthode ReadServiceTEST récupère une exception de type timeout au bout d'1 min d'attente.
    En activant les traces WCF côté serveur, j'obtient le message suivant:

    Une erreur s’est produite lors de la demande HTTP à http://MonPC:1565/ed991dbd-6673-42f0-8b22-4590af8bbe7e. Cela peut être dû au fait que le certificat de serveur n’est pas configuré correctement avec HTTP.SYS pour HTTPS. Une autre raison possible est une non-correspondance de la liaison de sécurité entre le client et le serveur.
    Si quelqu'un à des suggestions...

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    A priori une minute ce n'est pas assez pour transférer tes 12mo avec ton débit et tu te manges un timeout. Tu as essayé de rallonger le timeout genre 10 minutes ?

    Place un stopwatch dans le serveur pour voir le temps qu'il mets pour construire le tableau, à ce temps devrait s'ajouter celui du transfert qui varie en fonction de ton débit et de celui du client.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci Hegros pour ta réponse.

    En fait je n'ai même pas essayé de rallonger le timeout car j'ai écarter rapidement cette piste. En effet, quand je créé un tableau de 12580000 int, l'envoie de ce tableau se fait en moins de 2s!!!Et donc en théorie l'envoi de 10000 int en plus ne devrait prendre que quelques milli-secondesen plus.

    Pour répondre a t-on idée de stopwatch, le tableau d'int se construit encore bien plus vite que 2s côté serveur.

    J'ai essayé de faire la même chose mais en NetTcpBinding et là ça fonctionne. J'arrive à faire passer 250Mo sans soucis! Le problème c'est que j'ai besoin du http...

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2005, 11h19
  2. Réponses: 5
    Dernier message: 28/10/2004, 15h22
  3. [JTextFiled]Mettre une taille max à la saisie
    Par mush_H dans le forum Composants
    Réponses: 13
    Dernier message: 29/07/2004, 11h22
  4. Taille Max que peux gerer un serveur SQL
    Par Youssef dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2004, 11h52
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo