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 :

MaxReceivedMessageSize encore et toujour


Sujet :

Windows Communication Foundation .NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut MaxReceivedMessageSize encore et toujour
    Bonjour,

    Ma question va sembler rébarbative car maintes fois posé sur moult forums mais sur un service WCF des plus basic (coté serveur et généré de base par notre Visual Studio adoré) je n'arrive pas à augmenter la taille du « MaxReceivedMessageSize » dans mon « Web.config ».

    (dans ma base de donnée j’ai une table ‘STUDENTS’ avec les champs ‘id’, ‘civility’, ‘firstname’ et ‘lastname’ qui contient plus de 31000 enregistrement)

    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
    24
    25
    26
    27
    28
    29
    30
    31
    <?xmlversion="1.0"encoding="utf-8"?>
    <configuration>
     
    <connectionStrings>
    <add name="MyConnectionString" connectionString="Data Source=****;Initial Catalog=****;Persist Security Info=True;User ID=****;Password=****"
    providerName="System.Data.SqlClient" />
    </connectionStrings>
     
    <system.web>
      <compilationdebug="true"targetFramework="4.0" />
    </system.web>
     
    <system.serviceModel>
     
      <behaviors>
    <serviceBehaviors>
        <behavior>
          <!-- Pour éviter la divulgation des informations sur les métadonnées, définissez la valeur ci-dessous sur false et supprimez le point de terminaison des métadonnées ci-dessus avant le déploiement. -->
          <serviceMetadatahttpGetEnabled="true"/>
          <!-- Pour recevoir les détails d'exception des erreurs à des fins de débogage, définissez la valeur ci-dessous sur true. Définissez-la sur false avant le déploiement pour éviter la divulgation des informations d'exception. -->
    <serviceDebugincludeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
     
    <serviceHostingEnvironmentmultipleSiteBindingsEnabled="true" />
     
    </system.serviceModel>
     
    </configuration>
    Pour info mon fichier IService1.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [ServiceContract]
    public interface IService1
    {
    [OperationContract]
    List<STUDENTS> GetSTUDENTS();
     
    [OperationContract]
    List<STUDENTS> GetSTUDENTSByFirstName(string firstName);
    }
    


    et Service1.svc.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public List<STUDENTS> GetSTUDENTS()
    {
          DataClasses1DataContext dc = new DataClasses1DataContext();
           var result = (from st in dc.STUDENTS orderby st.st_firstname select st);
           return result.ToList();
    }
    public List<STUDENTS> GetSTUDENTSByFirstName(string firstName)
    {
          DataClasses1DataContext dc = new DataClasses1DataContext();
           var result = (from st in dc.STUDENTS where st.st_firstname == firstName orderby st.st_firstname select st);
           return result.ToList();
    }
    L'appel de GetSTUDENTSByFirstName fonctionne car il retourne environ 200 résultat mais GetSTUDENTS()... Pouf, Bug MaxReceivedMessageSize

    Pour compléter, ce service est du coté serveur pour que mon appli Silverlight y accède via les « Service Reference ».

    Je ne sais pas si tout cela est la bonne facon de procéder mais je début sur WCF.

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il faut que tu étendes ton binding en lui spécifiant la nouvelle valeur pour maxReceivedMessageSize.

    Par exemple si tu utilises le binding basicHttpBinding alors ce sera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <system.serviceModel>
      <bindings>
        <basicHttpBinding>
          <binding maxReceivedMessageSize="tu mets la valeur que tu veux ici" />
        </basicHttpBinding>
      </bindings>
    </system.serviceModel>

  3. #3
    Invité
    Invité(e)
    Par défaut
    Il faut que tu étendes ton binding en lui spécifiant la nouvelle valeur pour maxReceivedMessageSize.

    Par exemple si tu utilises le binding basicHttpBinding alors ce sera

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <system.serviceModel>
      <bindings>
        <basicHttpBinding>
          <binding maxReceivedMessageSize="tu mets la valeur que tu veux ici" />
        </basicHttpBinding>
      </bindings>
    </system.serviceModel>

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci te ton aide h2s84 mais ca ne fonctionne toujours pas.
    J'ai mis la valeur à 2147483647

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
     
      <connectionStrings>
        <add name="MyConnectionString" 
             connectionString="Data Source=****;Initial Catalog=****;Persist Security Info=True;User ID=****;Password=****"
             providerName="System.Data.SqlClient" />
      </connectionStrings>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
     
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
     
        <bindings>
          <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647" />
          </basicHttpBinding>
        </bindings>
     
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
     
      </system.serviceModel>
     
     <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
     
    </configuration>
    Je pensais que ca me ferrais de la marge mais j'ai toujours le message qui revient.

    Est ce que mon retour dépasse cette valeur ?
    Comme je l'ai indiqué, pour le moment j'ai 31000 entrée dans cette table et elle va augmenter.

    Si c'est le cas, est ce que découper ma requete pour me renvoyer tout les étudiants dont le nom commence pas A puis B puis C... serrais une bonne pratique avec le rique qu'un jour le message revienne.

    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bizarre Donc ton message d'erreur n'est pas correct.

    Il se peut que tu ais dépassé le nombre maximum d'objet dans une collection à sérialiser alors je te propose de modifier cela comme suit dans l’élément behavior

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <behaviors>
          <serviceBehaviors>
            <behavior>
               <dataContractSerializer maxItemsInObjectGraph="tu mets la valeur que tu veux ici"/>
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>

    Si cela ne marche toujours pas alors bonne chance pour la suite

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Meci h2s84 mais ca vaux pas ^^

    Voici le détail du message d'erreur. Si quelqu'un peut éclairer ma lanterne =)

    Échec de l'appel du service. Causes possibles : le service est peut être hors ligne ou inaccessible ; la configuration côté client ne correspond pas au proxy ; le proxy existant n'est pas valide. Reportez-vous à la trace de la pile pour plus de détails. Vous pouvez tenter une récupération en démarrant un nouveau proxy, en restaurant la configuration par défaut ou en actualisant le service.

    Détail de l’erreur :

    Le quota de taille maximale autorisée pour les messages entrants (65536) a été dépassé. Pour augmenter le quota, utilisez la propriété MaxReceivedMessageSize sur l'élément de la liaison appropriée.

    Server stack trace:
    à System.ServiceModel.Channels.HttpInput.ThrowMaxReceivedMessageSizeExceeded()
    à System.ServiceModel.Channels.HttpInput.GetMessageBuffer()
    à System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)
    à System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(HttpRequestMessage httpRequestMessage, Exception& requestException)
    à System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
    à System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
    à System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
    à System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
    à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
    à System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

    Exception rethrown at [0]:
    à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    à System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    à IMABASEService.GetSTUDENTSX()
    à MABASEServiceClient.GetSTUDENTSX()

    Inner Exception:
    Le quota de taille maximale autorisée pour les messages entrants (65536) a été dépassé. Pour augmenter le quota, utilisez la propriété MaxReceivedMessageSize sur l'élément de la liaison appropriée.


  7. #7
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Bonjour,

    Il y a une chose qui m'étonne. Dans l'exception, il est précisé la taille de MaxReceivedMessageSize, et elle est de 65536. As-tu augmenté cette taille lors de ton dernier test ?

  8. #8
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    J'ai peut être eu un tilt en relisant ton message. De quel coté modifies-tu le MaxReceiveMessageSize ? Coté client ou coté serveur ?

    Je dirais que c'est du côté du client qu'il faut voir, puisque c'est lui qui reçoit de longs messages

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour EItotor,

    Ben c’est justement ma question, comme nous en avons discuté avec h2s84.
    Je dois augmenter la valeur de MaxReceiveMessageSize mais je ne comprends pas où et comment.
    Je pense bien que c’est dans mon fichier web.config mais malgré les divers exemples que j’ai pu trouver sur des forums ou tuto, ou ce que ma conseillé h2s84, je n’arrive pas à récupérer le résultat de ma requête.

    D’autant que tout ce service est généré par Visual Studio de la façon la plus basique possible.

    Visual Studio -> Nouveau Projet -> application de service WCF
    Ajouter-> Nouvel élément -> Données -> Classe Linq to SQL
    Explorateur de serveur ->Nouvelle connexion
    Glissé déplacé ma table dans mon DataClasse1.dbml

    Dans mon fichier IService1.cs je rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [OperationContract]
    List<STUDENTS> GetStudents();
    Et dans le fichier Service1.svc.cs je rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public List<STUDENTS> GetStudents()
    {
    DataClasses1DataContext dc = new DataClasses1DataContext();
     
           var result = (from sts in dc.STUDENTS
                         orderby sts.st_firstname
                         select sts).ToList();
     
           return result;
    }
    Générer la solution -> Démarrer le débogage (F5) sur la page Service1.svc.cs pour tester mon service avec le « Client test WCF »

    Sur une table plus petite ou si ma requête Linq sur celle-ci me renvois moins de résultat comme « …where sts.st_firstname == "David" » cela fonctionne.
    Mais sur l’ensemble de la table j’ai l’erreur.

    Coté serveur ou client ? Tel quel je ne saurais pas répondre. Au final ce service sera hébergé sur le serveur IIS qui fait aussi serveur de base de données. Mais juste la comme ça je suis totalement en local sur mon PC et sans proxy.

    Il y a surement quelque chose qui m’échappe mais à force, je ne vois pas où.

    Encore merci de votre aide et vos suggestions…

  10. #10
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Bonjour Usi_Gh0st,

    Alors, que tout soit en local sur ta machine ou que ce soit sur des machines différentes, il y a toujours la notion de serveur et la notion de client.

    Le coté serveur représente le serveur hébergeant ton webservice.
    Le client représente celui qui consomme ton webservice. Le client peut être un client lourd ou un client léger.

    Comme le problème survient lorsque tu interroges ton webservice et qu'il renvoit un trop grand nombre de données, c'est au niveau du client qu'il faut préciser le MaxReceiveMessageSize. Dans le cas d'un client lourd, c'est dans le fichier app.config. Dans le cas d'un client léger, dans le web.config.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour EITotor,

    Nuit courte, pas réveillé… côté serveur ou client je voulais dire que je ne sais pas de quel côté est l’erreur.

    Comme me l’a indiqué h2s84, j’ai ajouté maxReceivedMessageSize dans mon fichier web.config donc côté serveur.

    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
     
    <system.serviceModel>
     
        <bindings>
          <basicHttpBinding>
            <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
          </basicHttpBinding>
        </bindings>
     
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
     
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
     
      </system.serviceModel>

    Ensuite, dans le « client test WCF » dans « Fichier de configuration », clic droit « Modifier avec SvcConfigEditor », dossier « Liaisons » clic sur « BasicHttp Binding… ».
    Là, j’augmente « MaxBufferSize » et « MaxReceivedMessageSize » à 2147483647 pour configurer le client vue qu’il faut que les paramètres soient les mêmes côté serveur et client.

    Sauvegarde, recharge de la config, là j’ai plus le message d’erreur, par contre j’attends, j’attends, j’attends… Je ne peux plus déplacer la fenêtre du Client test WCF, ça à l’aire gelé…

  12. #12
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Sauvegarde, recharge de la config, là j’ai plus le message d’erreur, par contre j’attends, j’attends, j’attends… Je ne peux plus déplacer la fenêtre du Client test WCF, ça à l’aire gelé…
    Plus de message d'erreur, je dirais qu'on progresse ! As-tu attendu suffisamment longtemps ? Une interface qui gèle peut signifier un traitement qui demande un certain temps (même si je ne pense pas que 31000 éléments relativement simple soient un gros problème)

Discussions similaires

  1. Clic droit encore et toujours
    Par Stéphane Olivier BERNARD dans le forum Access
    Réponses: 3
    Dernier message: 22/05/2006, 00h26
  2. IE/Firefox... encore et toujours...
    Par maniaco_jazz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 19/02/2006, 23h17
  3. nodes, child et compatibilité... encore et toujours
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2005, 14h26
  4. stencil buffer, encore et toujours
    Par JAimeBienCoderBourre dans le forum OpenGL
    Réponses: 4
    Dernier message: 08/04/2005, 11h16

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