Pregunta

Tengo una aplicación utilizando WCF en el lado del cliente y el servidor. Recibo errores cuando regrese una gran cantidad de datos:

  

Se ha producido un error al intentar serializar parámetro http://tempuri.org/:GetCurrentDatabaseObjectsResult . El mensaje InnerException era 'número máximo de elementos que se pueden serializar o deserializar en un gráfico de objetos es '65535'. Cambiar el gráfico de objetos o aumentar la cuota MaxItemsInObjectGraph. '. Por favor, vea InnerException para más detalles.

(el principal Lo importante es que tengo que aumentar el MaxItemsInObjectGraph).

He encontrado este artículo aquí: Cómo ¿puedo establecer la propiedad maxItemsInObjectGraph programación de una aplicación de Silverlight? pero parece que esto es sólo para el lado del cliente y lo que tenga que hacer esto en el servidor.

¿Fue útil?

Solución

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/specifying-data-transfer-in-service-contracts#controlling-the-serialization -process

Ir a "Controlar el proceso de serialización" la partida (o hacer una búsqueda de la maxItemsInObjectGraph)

Otros consejos

En el código:

foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
{
    DataContractSerializerOperationBehavior dataContractBehavior =
                op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                as DataContractSerializerOperationBehavior;
    if (dataContractBehavior != null)
    {
        dataContractBehavior.MaxItemsInObjectGraph = 100000;
    }
}

En la configuración:

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaivor">
      <serviceAuthorization impersonateCallerForAllOperations="True" />
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="2147483647" />
      <dataContractSerializer maxItemsInObjectGraph="65775" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Se desea especificar la propiedad en el atributo ServiceBehavior.

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top