Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Windows Communication Foundation
Windows Communication Foundation Forum d'entraide sur la technologie de communication inter-applications de Microsoft
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/02/2013, 13h23   #1
Usi_Gh0st
Invité de passage
 
Homme
Étudiant
Inscription : 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
Usi_Gh0st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 21h44   #2
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 743
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 743
Points : 5 176
Points : 5 176
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
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 FAQs 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
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2013, 21h44   #3
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 743
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 743
Points : 5 176
Points : 5 176
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
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 FAQs 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
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2013, 11h35   #4
Usi_Gh0st
Invité de passage
 
Homme
Étudiant
Inscription : 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
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
Usi_Gh0st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2013, 13h42   #5
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 743
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 743
Points : 5 176
Points : 5 176
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
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 FAQs 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
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2013, 14h40   #6
Usi_Gh0st
Invité de passage
 
Homme
Étudiant
Inscription : 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
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.

Usi_Gh0st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2013, 17h41   #7
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
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 : 104
Points : 226
Points : 226
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 ?
ElTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2013, 18h05   #8
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
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 : 104
Points : 226
Points : 226
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
ElTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2013, 12h50   #9
Usi_Gh0st
Invité de passage
 
Homme
Étudiant
Inscription : 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
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…
Usi_Gh0st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2013, 13h04   #10
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
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 : 104
Points : 226
Points : 226
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.
ElTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2013, 14h39   #11
Usi_Gh0st
Invité de passage
 
Homme
Étudiant
Inscription : 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
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é…
Usi_Gh0st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2013, 15h18   #12
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
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 : 104
Points : 226
Points : 226
Citation:
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)
ElTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h08.


 
 
 
 
Partenaires

Hébergement Web