2010-06-17 16 views
7

Si verificano problemi con la specifica dataContractSerializer maxItemsInObjectGraph nel web.config dell'host.Servizio WCF dataContractSerializer maxItemsInObjectGraph in 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> 

Quanto sopra non ha alcun effetto sulla mia estrazione dei dati. Il server è scaduto a causa del volume elevato di dati.

Posso tuttavia specificare il limite massimo nel codice e che funziona

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

Qualcuno sa il motivo per cui non riesco a fare questo lavoro attraverso un ambiente web.config? Mi piacerebbe rimanere nel web.config in modo che sia più facile per gli aggiornamenti futuri.

+0

Anche io sto avendo questo problema. Mi chiedo perché nessun altro ha risposto? Grazie per il consiglio di essere in grado di impostare 'ServiceBehavior' in codice, potrebbe almeno farmi spostare. – jocull

+0

Sapete che maxItemsInObjectGraph definisce solo il numero totale di elementi consentiti nella risposta, non la dimensione di risposta definitiva sì? (penso che se non è specificato, il valore predefinito è 60k xml elementi) –

+0

Dave, la tua domanda è stata risposta o no? Se la risposta data risolve il tuo problema, contrassegnalo come tale. – Bardia

risposta

12

Nella sezione comportamento, aggiungere un comportamento endpoint con l'DataContractSerializer, in questo modo:

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

Quindi modificare il tuo punto finale di utilizzare questo comportamento in questo modo:

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

Questo dovrebbe risolvere il problema .

+1

come un fascino. Grazie – SergioM

+1

Mi sono imbattuto in un problema simile oggi. Wcf lanciava eccezioni su MaxItemsInObjectGraph superato anche se era presente nel comportamento degli endpoint. poi l'ho spostato al comportamento Servizio che ha risolto il problema.http: //stackoverflow.com/questions/26610861/passing-comma-separated-string-value-to-a-wcf-rest-service/26613810#26613810 – user1131926