2010-06-17 9 views
7

Je rencontre des problèmes en spécifiant dataContractSerializer maxItemsInObjectGraph dans le fichier web.config de l'hôte.Service WCF dataContractSerializer maxItemsInObjectGraph dans web.config

<behaviors> 
    <serviceBehaviors> 
    <behavior name="beSetting"> 
     <serviceMetadata httpGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="True" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service name="MyNamespace.MyService" 
      behaviorConfiguration="beSetting" > 
    <endpoint address="http://localhost/myservice/" 
       binding="webHttpBinding" 
       bindingConfiguration="webHttpBinding1" 
       contract="MyNamespace.IMyService" 
       bindingNamespace="MyNamespace"> 
    </endpoint> 
    </service> 
</services> 

Ce qui précède n'a aucun effet sur mon extraction de données. Le serveur expire en raison du grand volume de données.

Je peux cependant spécifier la limite maximale dans le code et qui fonctionne

[ServiceBehavior(MaxItemsInObjectGraph=2147483646, IncludeExceptionDetailInFaults = true)] 
    public abstract class MyService : MyService 
    { 
    blah... 
} 

Est-ce que quelqu'un sait pourquoi je ne peux pas faire ce travail par un cadre web.config? Je voudrais garder dans le web.config donc c'est plus facile pour les futures mises à jour.

+0

J'ai aussi ce problème. Je me demande pourquoi personne d'autre n'a répondu? Merci pour l'astuce de pouvoir définir le 'ServiceBehavior' dans le code, cela peut au moins me faire bouger. – jocull

+0

Vous savez que maxItemsInObjectGraph ne définit que le nombre total d'éléments autorisés dans la réponse, et non la taille de la réponse absolue oui? (Je pense que si ce n'est pas spécifié, il est par défaut 60k éléments xml) –

+0

Dave, a été répondu à votre question ou non? Si la réponse donnée a résolu votre problème, marquez-le comme tel. – Bardia

Répondre

12

section Dans votre comportement, ajoutez un comportement de point de terminaison avec DataContractSerializer, comme ceci:

<endpointBehaviors> 
    <behavior name="LargeQuotaBehavior"> 
    <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
    </behavior> 
</endpointBehaviors> 

Modifiez ensuite votre point final d'utiliser ce comportement comme ceci:

<endpoint address="http://localhost/myservice/" 
      binding="webHttpBinding" 
      bindingConfiguration="webHttpBinding1" 
      contract="MyNamespace.IMyService" 
      bindingNamespace="MyNamespace" 
      behaviorConfiguration="LargeQuotaBehavior"> 

Cela devrait résoudre votre problème .

+1

comme un charme. Merci – SergioM

+1

J'ai rencontré un problème similaire aujourd'hui. Wcf lançait des exceptions à propos de maxItemsInObjectGraph dépassées même si elles étaient présentes dans le comportement du point de terminaison. alors j'ai déplacé cela au comportement de service qui a résolu le problème. http://stackoverflow.com/questions/26610861/passing-comma-separated-string-value-to-a-wcf-rest-service/26613810#26613810 – user1131926