2009-10-06 5 views
4

J'ai construit un service web Asp.net WCF au format json. Maintenant, je voulais vraiment tester son fonctionnement lors de l'envoi de beaucoup de données. La longueur de contenu de mon article http est 65595. Directement en essayant de me connecter, j'ai reçu l'erreur "HTTP/1.1 400 Bad Request". Il semble que ce n'est même pas essayer.JSON service web longueur maximale du contenu?

Je sais que j'envoie json valide et ce que j'envoie est un tableau avec environ 1000 éléments, et le json pour chaque élément ressemble à ceci: {"oid": 0, "am": 1, "moi": 2, "ofooid": 0, "fooid": 1104, "sync": 1, "type": 1, "id": 1443, "date": "2009-09-24"}

Si je supprime simplement l'un des éléments dans le tableau de sorte que la longueur totale du contenu est 65484, cela fonctionne parfaitement. Donc, il semble que ce soit une limite magique quelque part. Est-ce Asp.net qui limite la taille de la requête, et comment puis-je changer la taille maximale si c'est le cas?

Mon fichier web.config ressemble, et je pense que je devrais mettre la valeur maximale ici quelque part, mais je ne sais pas où:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="ServiceAspNetAjaxBehavior"> 
       <enableWebScript /> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="Service"> 
      <endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="Service" /> 
     </service> 
    </services> 
</system.serviceModel> 

Répondre

3

Vous devez augmenter la maxReceivedMessageSize dans la configuration de liaison pour WebHttpBinding. La valeur par défaut est 65536. Voir le WebHttpBinding configuration documentation pour toutes les informations.

Notez également que vous devrez peut-être augmenter ASP.NET maxRequestLength via la configuration httpRuntime. La valeur par défaut est de 4 Mo, mais vous devrez peut-être augmenter:

<httpRuntime maxRequestLength="10000" /> 
+0

Merci, c'est ce que je cherchais! Que pensez-vous est une bonne valeur pour le maxReceivedMessageSize? Je ne veux pas envoyer trop de données, peut-être que je devrais diviser les demandes en plus petite taille et se connecter plusieurs fois à la place? – Martin

3

En ce qui concerne l'augmentation de la taille de la demande est concernée réponse ci-dessus mentionné est juste, mais si vous voulez augmenter la taille de la réponse JSON alors vous pouvez faites ceci en faisant des changements dans le endpointBehaviors comme mentionné ci-dessous.

De même, cette réponse peut varier en fonction de l'imbrication des données, car nous pouvons renvoyer la liste avec des propriétés imbriquées.

En supposant point final comme celui-ci:

<endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="ClientBehavior"> 
For Client 
     <endpointBehaviors> 
      <behavior name="ClientBehavior"> 
      <dataContractSerializer maxItemsInObjectGraph="10000000"/> 
      </behavior> 
     </endpointBehaviors> 

For Server 
     <serviceBehaviors> 
     <behavior name="HostBehavior"> 
      <dataContractSerializer maxItemsInObjectGraph="10000000"/> 
     </behavior> 
     <serviceBehaviors> 
Questions connexes