Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 :
    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 :
    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
    Modérateur
    Avatar de h2s84
    Homme Profil pro Holty Samba SOW
    Développeur .NET
    Inscrit en
    mars 2007
    Messages
    3 021
    Détails du profil
    Informations personnelles :
    Nom : Homme Holty Samba SOW
    Âge : 29
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 3 021
    Points : 5 847
    Points
    5 847

    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 :
    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>
    Consultant .Net chez SoftFluent
    Découvrir notre produit CodeFluent Entities

    Adhérer à l'association Fier d'être développeur
    Les FAQ sur les technologies .Net voir ici
    Les cours et tutos sur les technologies .Net voir ici
    Les critiques sur les livres parlant des technologies .Net voir ici
    Pensez à la balise [CODE]
    Pensez au tag si votre problème est résolu

  3. #3
    Modérateur
    Avatar de h2s84
    Homme Profil pro Holty Samba SOW
    Développeur .NET
    Inscrit en
    mars 2007
    Messages
    3 021
    Détails du profil
    Informations personnelles :
    Nom : Homme Holty Samba SOW
    Âge : 29
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 3 021
    Points : 5 847
    Points
    5 847

    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 :
    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>
    Consultant .Net chez SoftFluent
    Découvrir notre produit CodeFluent Entities

    Adhérer à l'association Fier d'être développeur
    Les FAQ sur les technologies .Net voir ici
    Les cours et tutos sur les technologies .Net voir ici
    Les critiques sur les livres parlant des technologies .Net voir ici
    Pensez à la balise [CODE]
    Pensez au tag si votre problème est résolu

  4. #4
    Invité de passage
    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 : 0
    Points
    0

    Par défaut

    Merci te ton aide h2s84 mais ca ne fonctionne toujours pas.
    J'ai mis la valeur à 2147483647

    Code :
    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
    Modérateur
    Avatar de h2s84
    Homme Profil pro Holty Samba SOW
    Développeur .NET
    Inscrit en
    mars 2007
    Messages
    3 021
    Détails du profil
    Informations personnelles :
    Nom : Homme Holty Samba SOW
    Âge : 29
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 3 021
    Points : 5 847
    Points
    5 847

    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 :
    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
    Consultant .Net chez SoftFluent
    Découvrir notre produit CodeFluent Entities

    Adhérer à l'association Fier d'être développeur
    Les FAQ sur les technologies .Net voir ici
    Les cours et tutos sur les technologies .Net voir ici
    Les critiques sur les livres parlant des technologies .Net voir ici
    Pensez à la balise [CODE]
    Pensez au tag si votre problème est résolu

  6. #6
    Invité de passage
    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 : 0
    Points
    0

    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 confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Nom : Homme François DORIN
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : décembre 2012
    Messages : 106
    Points : 216
    Points
    216

    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 confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Nom : Homme François DORIN
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : décembre 2012
    Messages : 106
    Points : 216
    Points
    216

    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    1
    2
    [OperationContract]
    List<STUDENTS> GetStudents();
    Et dans le fichier Service1.svc.cs je rajoute

    Code :
    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 confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Nom : Homme François DORIN
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : décembre 2012
    Messages : 106
    Points : 216
    Points
    216

    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Nom : Homme François DORIN
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : décembre 2012
    Messages : 106
    Points : 216
    Points
    216

    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)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •