Question

J'ai une application utilisant WCF côté client et serveur. Je reçois des erreurs quand je reviens d'une grande quantité de données:

  

Il y avait une erreur en essayant de paramètre sérialisation http://tempuri.org/:GetCurrentDatabaseObjectsResult . Le message InnerException était « Nombre maximum d'éléments qui peuvent être en série ou en désérialisés dans un graphe d'objet est « 65535 ». Modifier le graphique d'objets ou d'augmenter le quota MaxItemsInObjectGraph. ». S'il vous plaît voir InnerException pour plus de détails.

(la principale chose importante est que j'ai d'augmenter le MaxItemsInObjectGraph).

J'ai trouvé cet article ici: Comment puis-je définir la propriété MaxItemsInObjectGraph par programmation à partir d'une application Silverlight? mais il semble que ce soit seulement pour le côté client et je dois faire sur le serveur.

Était-ce utile?

La solution

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

Aller en bas « Contrôle du processus de sérialisation » rubrique (ou faire une recherche pour le MaxItemsInObjectGraph)

Autres conseils

Dans le code:

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

Dans la configuration:

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

Vous voulez spécifier la propriété dans l'attribut ServiceBehavior.

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top