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

Silverlight Discussion :

[WCF] problème de taille de quota


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut [WCF] problème de taille de quota
    Bonjour à tous,

    Je rencontre à l'heure actuelle un petit souci de communication entre mon composant Silverlight (je travaille avec la version 4) et ma couche WCF...

    En effet je lui passe un objet de ma conception et dès que ce dernier dépasse une certain taille (en rajoutant à une de ses collections un nouvel objet par exemple), WCF explose.

    Mes logs WCF m'indique cette 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.
    Cette dernière est effectivement l'erreur basique lorsqu'on se sert des valeurs par défaut de WCF. Or il se trouve que tous les quotas et buffers ont été passés à Int32.MaxValue (si je ne me trompe pas, cette valeur m'assure donc de pouvoir passer jusqu'à 2Go de données, et je puis assurer que mon objet ne fait pas cette taille...), mais cela ne change rien...

    Je dois avouer qu'après avoir tourné pendant plusieurs jours sur le net, et essayer maintes configuration différentes, je commence à désespérer un peu...

    Ci-dessous ma configuration serveur:
    Code xml : 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
    39
    40
    41
    42
    43
    44
      <system.web>
        <httpRuntime executionTimeout="999999" maxRequestLength="2097151" />
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
     
      <system.serviceModel>
        <bindings>
          <customBinding>
            <binding name="binaryHttpBinding" closeTimeout="00:20:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:20:00">
              <binaryMessageEncoding maxReadPoolSize="2147483647" maxWritePoolSize="2147483647" maxSessionSize="2147483647">
                <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
              </binaryMessageEncoding>
              <httpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" authenticationScheme="Anonymous" maxBufferSize="2147483647" transferMode="Buffered"/>
            </binding>
          </customBinding>
        </bindings>
     
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
     
        <behaviors>
          <serviceBehaviors>
            <behavior name="MonServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
              <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
              <bufferedReceive maxPendingMessagesPerChannel="2147483647"/>
            </behavior>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <bufferedReceive maxPendingMessagesPerChannel="2147483647"/>
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="MonServiceBehavior" name="Application.Web.Service">
            <endpoint address="" binding="customBinding" bindingConfiguration="binaryHttpBinding" contract="ServicesWCF.IServiceWCF">
              <identity>
              </identity>
            </endpoint>
          </service>
        </services>
      </system.serviceModel>

    Et là ma configuration coté client:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IServiceWCF" maxBufferSize="2147483647"
              maxReceivedMessageSize="2147483647">
              <security mode="None" />
            </binding>
          </basicHttpBinding>
        </bindings>
      </system.serviceModel>

    Quelqu'un aurait-il une idée sur mon problème? Peut-être manque-t-il quelque chose dans ma configuration? Ou bien peut-être quelque chose est à régler sur mon serveur IIS 7 qui publie le service WCF??

    D'avance merci,
    Bonne journée,

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par rastamath69 Voir le message
    Bonjour à tous,

    Je rencontre à l'heure actuelle un petit souci de communication entre mon composant Silverlight (je travaille avec la version 4) et ma couche WCF...

    En effet je lui passe un objet de ma conception et dès que ce dernier dépasse une certain taille (en rajoutant à une de ses collections un nouvel objet par exemple), WCF explose.
    Il est clair que le problème est à chercher du coté de l'objet (chercher des choses comme des références croisés parent-enfant et enfant-parent dans les collections, entrainant une sérialisation très encombrante, etc ....), pas de WCF ou d'IIS.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    Salut!

    Ben il n'y a aucune redondance cyclique. Et le test est simple à faire :

    1) je prend mon objet dans un état je le renvoie au serveur : ça passe!

    2) je prend mon objet dans le même état, je rajoute un élément ne référençant rien d'autre dans une de ses collections quelconques : ça passe plus...

    Et je n'avais jamais rencontré ce genre de soucis jusqu'à ce que j'augmente le nombre d'élément à un certain niveau dans les ramifications de l'objet...

    Une autre idée ou piste que je pourrais regarder?

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par rastamath69 Voir le message
    Salut!

    Ben il n'y a aucune redondance cyclique. Et le test est simple à faire :

    1) je prend mon objet dans un état je le renvoie au serveur : ça passe!

    2) je prend mon objet dans le même état, je rajoute un élément ne référençant rien d'autre dans une de ses collections quelconques : ça passe plus...
    Test simple : ton instance que tu passe à WCF et qui "fait planter", fais en une serialisation Xml dans un fichier avant de la passer à WCF et vois ce que ça donne, notamment la taille du fichier généré.

    Je maintiens qu'il doit y avoir un truc tordu dans l'objet qui ne saute pas forcément aux yeux. (je me souviens que cela m'est déjà arrivé).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    alors je viens de me faire la sérialisation en XML (j'ai mis un peu de temps, je l'avais jamais fait sous Silverlight, et j'ai pas accès à toutes les API dont j'avais l'habitude!! :p)

    Et je n'ai rien vu de particulier...

    J'ai généré 2 fichiers XML à partir des flux:
    Le premier (celui qui marche) fait 55*525 octets

    Le deuxième (qui marche plus) fait 56*763 octets,

    En comparant avec WinMerge les 2 fichiers, à part l'ajout de mon nouvel objet je ne vois rien d'autre de spécial...

    Pas de référence bizarre qui me ferait péter la boutique...

    Pour info j'ai généré mon XML de cette manière:
    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
     
    private String UTF8ByteArrayToString(Byte[] characters)
    {
            UTF8Encoding encoding = new UTF8Encoding();
            String constructedString = encoding.GetString(characters, 0, characters.Length);
            return (constructedString);
    }
     
    String XmlizedString = null;
    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
    System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(TypeDeMonObjet));
    System.IO.StreamWriter strWrit = new System.IO.StreamWriter(memoryStream);
    xs.Serialize(strWrit, MonObjetQuiMembete);
     
    memoryStream = (System.IO.MemoryStream)strWrit.BaseStream;
    XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    Je vais aller me coucher je pense...
    J'ai trouvé une solution à mon problème, mais j'aimerai bien qu'on m'explique...

    J'ai modifié ma config serveur en lui indiquant que mon binding n'était plus de type "CustomBinding" mais "basicHttpBinding", mais le plus étonnant reste le point suivant : j'ai enlevé le nom du binding : "name="""
    et pour l'attribut BindingConfiguration de mon endPoint ben je l'ai tout simplement supprimé... (l'association n'est donc plus explicite...)

    Ma config qui marche donne ceci:
    Code xml : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     <system.web>
        <httpRuntime executionTimeout="999999" maxRequestLength="2097151" />
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
     
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <clear/>
            <binding name=""
                   hostNameComparisonMode="StrongWildcard"
                   receiveTimeout="00:10:00"
                   sendTimeout="00:10:00"
                   openTimeout="00:10:00"
                   closeTimeout="00:10:00"
                   maxReceivedMessageSize="2147483647"
                   maxBufferSize="2147483647"
                   maxBufferPoolSize="2147483647"
                   transferMode="Buffered"
                   messageEncoding="Text"
                   textEncoding="utf-8"
                   bypassProxyOnLocal="false"
                   useDefaultWebProxy="true" >
              <security mode="None" />
            </binding>
           </basicHttpBinding>
        </bindings>
     
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
     
        <behaviors>
          <serviceBehaviors>
            <behavior name="MonServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
              <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
              <bufferedReceive maxPendingMessagesPerChannel="2147483647"/>
            </behavior>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <bufferedReceive maxPendingMessagesPerChannel="2147483647"/>
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="MonServiceBehavior" name="Application.Web.Service">
            <endpoint address="" binding="basicHttpBinding" contract="ServicesWCF.IServiceWCF">
              <identity>
              </identity>
            </endpoint>
          </service>
        </services>
      </system.serviceModel>

    Cette manipulation est issue de ce forum silverlight:
    http://forums.silverlight.net/forums/p/21326/74333.aspx

    Quelqu'un a une explication?? parce que moi perso, depuis plus de 40h que je suis sur le problème, j'ai le cerveau retourné...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/02/2009, 17h21
  2. Problème de taille de tableau
    Par k-nine dans le forum C
    Réponses: 6
    Dernier message: 25/09/2005, 09h16
  3. [CSS] Problème de taille de div
    Par meda dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 24/08/2005, 14h30
  4. [swing][JComboBox]Problème de taille
    Par n!co dans le forum Composants
    Réponses: 8
    Dernier message: 06/03/2004, 10h53
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

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