Impostare a livello di programmazione MaxitemsInObjectGraph
Domanda
Ho un'applicazione che utilizza WCF sul lato client e server. Ricevo errori quando restituisco una grande quantità di dati:
C'è stato un errore mentre si cercava di serializzare il parametro http://tempuri.org/:GetCurrentDatabaseObjectsResult. Il messaggio di InneRexception era "il numero massimo di elementi che possono essere serializzati o deserializzati in un grafico degli oggetti è" 65535 ". Cambia il grafico degli oggetti o aumenta la quota MAXItemsinobjectGraph. '. Si prega di consultare Innerexception per maggiori dettagli.
(La cosa importante è che devo aumentare il maxitemsinobjectgraph).
Ho trovato questo articolo qui: Come posso impostare la proprietà MaxItemsinobjectGraph a livello di programmazione da un'applicazione Silverlight? Ma sembra che questo sia solo per il lato client e devo farlo sul server.
Soluzione
scendere al "Controllo del processo di serializzazione" voce (o fare una ricerca per la maxItemsInObjectGraph)
Altri suggerimenti
Nel codice:
foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dataContractBehavior =
op.Behaviors.Find<DataContractSerializerOperationBehavior>()
as DataContractSerializerOperationBehavior;
if (dataContractBehavior != null)
{
dataContractBehavior.MaxItemsInObjectGraph = 100000;
}
}
Nella configurazione:
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaivor">
<serviceAuthorization impersonateCallerForAllOperations="True" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="2147483647" />
<dataContractSerializer maxItemsInObjectGraph="65775" />
</behavior>
</serviceBehaviors>
</behaviors>
Si desidera specificare la proprietà nell'attributo ServiceBehavior.
[ServiceContract]
[ServiceBehavior(MaxItemsInObjectGraph=100000)]
public interface IDataService
{
[OperationContract]
DataPoint[] GetData();
}