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 :

Comment passer un gros tableau à une méthode de service wcf ?


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Par défaut Comment passer un gros tableau à une méthode de service wcf ?
    Bonjour,

    J'essai de passé un tableau d'environ 30 000 instances à une méthode d'un service wcf et je tombe sur cette erreur si mon tableau dépasse plus de 15 000 instances environ :

    Une erreur s'est produite lors de la réception de la réponse HTTP à http://localhost:50694/MyService.svc. La raison peut en être que la liaison de point de terminaison de service n'utilise pas le protocole HTTP. Cela peut également être dû au fait qu'un contexte de demande HTTP a été ignoré par le serveur (peut-être à cause de l'arrêt du service). Pour plus d'informations, consultez les journaux du serveur.
    J'ai rajouté ça dans mon web.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    et ça dans mon client :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    MyServiceClient myServiceClient = new MyServiceClient();
          myServiceClient.Endpoint.Address = new EndpointAddress(uri);
     
          foreach (var operationDescription in myServiceClient.Endpoint.Contract.Operations)
          {
            DataContractSerializerOperationBehavior dataContractBehavior =
                    operationDescription.Behaviors.Find<DataContractSerializerOperationBehavior>()
                    as DataContractSerializerOperationBehavior;
     
            if (dataContractBehavior != null)
              dataContractBehavior.MaxItemsInObjectGraph = int.MaxValue;
          }
     
          return myServiceClient;
    Mais ça ne semble pas faire grand chose.
    Quelqu'un pourrait m'aider ?

    Merci d'avance.
    (vs 2010, frk 4)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Il n'y a pas que le nombre d'objets dans le graphe sur lequel tu peux jouer, il y a aussi la taille maximale du buffer...
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maxBufferSize="655360000"
    maxReceivedMessageSize="655360000"
    Par contre passer un tel tableau en http, si tes objets sont lourds, ça risque quand même d'être délicat. Peut-être devrais tu faire ça en plusieurs appels ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Par défaut
    J'ai déjà mis toutes ces propriétés au max, ça n'a pas résolu mon problème.
    Je voulais éviter de faire ça en plusieurs appels mais il semblerait que je ne vais pas avoir tellement le choix

    En tout cas, merci pour ta réponse.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Dans les architectures web, en général se qui se fait est la récupération des données au besoin, pas le chargement intégral, tous les outils ne sont pas bons pour tous les besoins !

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

Discussions similaires

  1. Comment passer en paramètre d'une méthode, une autre méthode ?
    Par Invité dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 31/03/2013, 03h59
  2. Réponses: 3
    Dernier message: 22/09/2009, 12h45
  3. Réponses: 4
    Dernier message: 27/06/2005, 19h26
  4. Comment connaitre l'appelant d'une méthode
    Par Alec6 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/07/2004, 14h51

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