Frage

Ich habe eine Anwendung mit WCF auf Client- und Server-Seite. Bekomme ich Fehler, wenn ich eine große Menge an Daten zurückgeben:

  

Es gab einen Fehler beim Versuch, serialisiert Parameter http://tempuri.org/:GetCurrentDatabaseObjectsResult . Die Innerexception Nachricht war ‚Maximale Anzahl der Elemente, die in einem Objektdiagramm serialisiert oder deserialisiert werden kann, ist‚65535‘. Ändern Sie den Objektgraphen oder erhöhen Sie die MaxItemsInObjectGraph Quote. ‘. Bitte sehen Innerexception für weitere Details.

(das Haupt Wichtigste ist, dass ich habe die MaxItemsInObjectGraph zu erhöhen).

ich diesen Artikel hier: Wie kann ich die MaxItemsInObjectGraph Eigenschaft programmatisch von einer Silverlight-Anwendung festgelegt? aber es scheint dies nur für die Client-Seite ist und ich brauche diese auf dem Server zu tun.

War es hilfreich?

Lösung

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

Runter zu „Steuern der Serialisierung“ Überschrift (oder eine Suche nach dem MaxItemsInObjectGraph tun)

Andere Tipps

Code:

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

In der Konfiguration:

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

Sie mögen die Eigenschaft im ServiceBehavior Attribute angeben.

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top