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.

È stato utile?

Soluzione

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

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(); 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top