Définir le programme MaxItemsInObjectGraph
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.
La solution
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();
}