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 :

Problème de quotas de transfert WCF


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut Problème de quotas de transfert WCF
    Bonjour,

    Je tiens à préciser que le téléchargement effectué via cette application est légal.

    J'ai une petite appli Silverlight Out of browser qui permet de télécharger tous les fichiers d'un dossier présent sur un serveur distant. Pour cela, j'ai créé un service WCF wcfClient qui appelle sa méthode CopyFileLocal de manière "récursive".
    Au chargement de la page, j'ai une méthode du service qui renvoie un List<string> contenant les noms des fichiers à télécharger.
    CopyFileLocal a comme paramètre le chemin du dossier sur le serveur et le nom du fichier à télécharger (tiré de ma liste de string).

    1. A partir de mon code C# : je boucle sur ma liste de fichiers, en appelant wcfClient.CopyFileLocalAsync
    2. Le service récupère les byte du fichier du serveur et me les renvoie dans un tableau de byte.
    3. Dans le traitement de wcfClient_CopyFileLocalCompleted, j'écris ce tableau de byte dans un fichier que je créé sur le disque local. Puis je rappelle la méthode CopyFileLocal à la fin de ce traitement, avec le nom du fichier suivant en paramètre.

    Sur mon dossier de test, j'ai 30 fichiers à télécharger. Tout fonctionne bien sur les 7 premiers fichiers et sur le 8è il bloque... Je ne comprends pas pourquoi, aucun message ne s'affiche, alors que les exceptions et erreurs sont traitées.

    Est ce que le service plante à force de se "rappeler lui même" ? Est ce que c'est une histoire de limite de transfert, sachant que dans mon ClientConfig j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
    et le fichier est bien loin de cette taille, la somme des 7 fichiers aussi.

    Merci pour vos lumières ..

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut Problème ciblé..
    Si je saute le fichier qui ne fonctionne pas, les autres se copient correctement, c'est donc un problème de taille de fichiers. Il fait environ 6Mo. Pourtant dans mon ClientConfig, j'ai bien la valeur de mon maxBufferSize supérieure à 6Mo, ou alors ce n'est pas ça que ça concerne...
    Sachant que je renvoie un tableau de byte, la taille maximum de ce type est de combien?

    Merci

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    il serait peut être plus utile d'exposer un Stream via WCF, ou du moins un proxy vers un Stream.
    cela te permettrait de faire la lecture comme si tu était sur le serveur sans saturé les buffers.

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Citation Envoyé par cinemania Voir le message
    il serait peut être plus utile d'exposer un Stream via WCF, ou du moins un proxy vers un Stream.
    cela te permettrait de faire la lecture comme si tu était sur le serveur sans saturé les buffers.
    Merci de ta réponse.
    Tu veux dire, renvoyer un objet Stream de mon wcf? et non un tableau de byte[] ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    J'ai suivi ce lien :
    • http://blogs.visionitgroup.be/blog/g...Post.aspx?ID=9 :
      - augmentation de la taille de maxRequestLength à 10Mo (soit une valeur de 10000 car elle est en Ko) : <httpRuntime maxRequestLength=”10000”/>. J'ai mis cela dans le web.config du service wcf et dans celui du projet.web
      - la clé readerQuotas dont il parle, dans la section basicHttpBinding/binding n'est pas reconnue dans mon ClientConfig (cette section n'existe que dans le ClientConfig ou je me trompe?)


    Ca ne marche toujours pas
    Une idée??

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Ca marche pas mieux en retournant un stream, le problème reste le même au niveau des quotas de transfert. J'ai fait les modifs comme expliqué juste avant et ça ne fonctionne pas non plus.. Je vais continuer à farfouiller, mais là je ne vois pas où chercher encore!

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    si tu expose un proxy stream, tu ne charge pas l'intégralité du fichier en un seul bloc non ?

    il faut le faire progressivement, sinon, même en fournissant un proxy... c'est fichu.
    et partant de ce principe t'a même pas besoin d'un stream, mais là il faudrait que tu gère toute la logique de transfert en blocs au niveau des 2 paires alors que là tu gère juste ça au niveau du client

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Merci Cinemania.
    Je ne comprends pas tout, mais je vais faire des recherches et tester ta solution. Je vous tiens au courant.

    Bonne journée

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut Ca y'est!

    J'ai réussi en gardant ma solution de renvoi d'un tableau de byte[], et en modifiant certaines parties des fichiers de config et grâce au lien de Bewise :
    http://www.bewise.fr/article/slf/102...onnalisee.aspx

    Dans le web.config du WCF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IServiceDownload" transferMode="Streamed">
              <readerQuotas maxArrayLength="16384000" maxBytesPerRead ="4096000"
                            maxDepth="32" maxStringContentLength="81920000" maxNameTableCharCount="16384000" />
              <security mode="TransportWithMessageCredential">
                <transport clientCredentialType="Basic"/>
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
    Dans le web.config du projet .Web côté Silverlight :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <system.web>      
          <httpRuntime maxRequestLength="30000000" />
    </system.web>
    Dans le Client.Config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <system.web>
        <httpRuntime maxRequestLength="30000000" />
      </system.web>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IServiceDownload" maxBufferSize="2147483647"
                        maxReceivedMessageSize="2147483647" transferMode="StreamedResponse">
                        <security mode="None" />
                    </binding>
                </basicHttpBinding>
            </bindings>
    Et problème résolu

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

Discussions similaires

  1. Problème de consommation de données WCF avec Silverlight
    Par EdouardTH dans le forum Services Web
    Réponses: 0
    Dernier message: 20/05/2011, 14h52
  2. Réponses: 2
    Dernier message: 18/05/2011, 17h43
  3. Problème publication application avec service WCF
    Par exopartners dans le forum IIS
    Réponses: 3
    Dernier message: 12/04/2010, 09h17
  4. [AC-2003] Problème lors d'un transfert d'enregistrement entre deux tables
    Par rberniga dans le forum VBA Access
    Réponses: 26
    Dernier message: 14/08/2009, 12h07
  5. Problème de quotas utilisateur
    Par LAMARE dans le forum Oracle
    Réponses: 10
    Dernier message: 14/11/2006, 12h18

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