2010-06-17 22 views
7

Tengo problemas para especificar dataContractSerializer maxItemsInObjectGraph en el host web.config.WCF service dataContractSerializer maxItemsInObjectGraph en 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> 

Lo anterior no tiene ningún efecto en mi extracción de datos. El servidor agota el tiempo debido al gran volumen de datos.

puedo sin embargo especificar el límite máximo en el código y que funciona

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

¿Alguien sabe por qué no puedo hacer este trabajo a través de una configuración web.config? Me gustaría mantenerme en la web.config para que sea más fácil para futuras actualizaciones.

+0

Estoy teniendo este problema también. Me pregunto por qué nadie más ha respondido? Gracias por el consejo sobre poder establecer el 'ServiceBehavior' en el código, al menos puede hacer que me mueva. – jocull

+0

¿Sabía que maxItemsInObjectGraph solo define la cantidad total de elementos permitidos en la respuesta, no el tamaño de respuesta absoluto, sí? (Creo que si no está especificado, tiene un valor predeterminado de 60k xml) –

+0

Dave, ¿se ha respondido tu pregunta o no? Si la respuesta dada resolvió su problema, márquelo como tal. – Bardia

Respuesta

12

En su sección de comportamiento, agregue un comportamiento de punto final con el DataContractSerializer, así:

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

A continuación, modifique su criterio de valoración a utilizar este comportamiento así:

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

Esto debería resolver su problema .

+1

como un encanto. Gracias – SergioM

+1

Me encontré con un problema similar hoy. Wcf lanzaba excepciones sobre maxItemsInObjectGraph excedido a pesar de que estaba allí en el comportamiento del punto final. luego moví eso al comportamiento del Servicio que resolvió el problema.http: //stackoverflow.com/questions/26610861/passing-comma-separated-string-value-to-a-wcf-rest-service/26613810#26613810 – user1131926