Ajustar la programación MaxItemsInObjectGraph
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.
Solución
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();
}