Benutzer mit den meisten Antworten
WCF - Übertragen größerer Datenmengen

Frage
-
Hallo zusammen,
ich arbeite mich derzeit in WCF ein und habe gleich zu Beginn ein Projekt, bei dem größere Datenmengen übertragen werden sollen. So sieht die Service-Definition aus:[ServiceContract] public interface IWCFServer { [OperationContract] List<Pruefung> ListeGet(); } [DataContract] public class Pruefung { [DataMember] public Int64 int64ID; [DataMember] public DateTime dtDatumUhrzeit; [DataMember] public Int32 intWert1; [DataMember] public Int32 intWert2; [DataMember] public String stText; [DataMember] public Int32 intWert3; [DataMember] public Dictionary<String, Int32> diMesswerte; }
Das ist die config-Datei des Servers:
<system.serviceModel> <services> <service behaviorConfiguration="WCF.ServiceBehavior" name="WCF.svcWCF"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="" contract="WCF.IWCFServer"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:8523/wcf" /> </baseAddresses> <timeouts openTimeout="00:01:00" /> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="WCF.ServiceBehavior"> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> <serviceMetadata httpGetEnabled="false" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
So sieht's am Client aus:<system.serviceModel> <bindings> <netTcpBinding> <binding name="NetTcpBinding_IWCF" closeTimeout="00:01:00" maxReceivedMessageSize="2147483647"> <security mode="Transport"> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"> <extendedProtectionPolicy policyEnforcement="Never" /> </transport> <message clientCredentialType="Windows" /> </security> </binding> </netTcpBinding> </bindings> <client> <endpoint address="net.tcp://localhost:8523/wcf" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IWCF" contract="srPrDatWCF.IWCF" name="NetTcpBinding_IWCF" /> </client> </system.serviceModel>
Wenn der Client die Funktion "ListeGet();" aufruft, erhalte ich die Fehlermeldung: "Die maximale Anzahl der Elemente in einem Objektgraph, die serialisiert bzw. deserialisiert werden können, beträgt "65536". Ändern Sie den Objektgraph oder erhöhen Sie das MaxItemsInObjectGraph-Kontingent.""MaxItemsInObjectGraph" habe ich ja am Server unter "serviceBehaviors" schon hoch gesetzt, muss ich das noch irgendwo anpassen?
Gruß,
Matthias
- Verschoben Robert BreitenhoferModerator Montag, 25. Juli 2011 15:39 WCF (aus:Visual C#)
Montag, 25. Juli 2011 08:48
Antworten
-
Du musst es auf beiden Seiten konfigurieren.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann- Als Antwort markiert Matthias Schuppe Montag, 25. Juli 2011 10:39
Montag, 25. Juli 2011 08:53 -
Hi Matthias,
wie Stefan schon gesagt hat, muss du auf beiden Seiten Seiten den Wert einstellen.
Trotzdem ist es keine gute Idee, eine so große Masse en Block zu senden.
Hast du dir mal überlegt die Daten aufzuteilen ?
zB in einer List<DeiNDatenTyp>().Take(500).Skip(x) ?
Grüße
- Als Antwort markiert Matthias Schuppe Montag, 25. Juli 2011 10:40
Montag, 25. Juli 2011 08:57 -
Wenn du in der Client Konfiguration ein Array als Übertragungsform gewählt hast, dann solltest du auch die MaxArrayLength hochsetzen.
Schau dir dazu auch mal folgenden Link an:
http://msdn.microsoft.com/en-us/library/ms731343.aspx- Als Antwort markiert Matthias Schuppe Montag, 25. Juli 2011 10:40
Montag, 25. Juli 2011 08:58
Alle Antworten
-
Du musst es auf beiden Seiten konfigurieren.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann- Als Antwort markiert Matthias Schuppe Montag, 25. Juli 2011 10:39
Montag, 25. Juli 2011 08:53 -
Hi Matthias,
wie Stefan schon gesagt hat, muss du auf beiden Seiten Seiten den Wert einstellen.
Trotzdem ist es keine gute Idee, eine so große Masse en Block zu senden.
Hast du dir mal überlegt die Daten aufzuteilen ?
zB in einer List<DeiNDatenTyp>().Take(500).Skip(x) ?
Grüße
- Als Antwort markiert Matthias Schuppe Montag, 25. Juli 2011 10:40
Montag, 25. Juli 2011 08:57 -
Wenn du in der Client Konfiguration ein Array als Übertragungsform gewählt hast, dann solltest du auch die MaxArrayLength hochsetzen.
Schau dir dazu auch mal folgenden Link an:
http://msdn.microsoft.com/en-us/library/ms731343.aspx- Als Antwort markiert Matthias Schuppe Montag, 25. Juli 2011 10:40
Montag, 25. Juli 2011 08:58