Feed
Google+
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

WCF – Irreführende Fehlermeldung Part II

by Roland Schumacher alias GENiALi 10. Februar 2010 -- 341 words  -- 7418 mal gelesen

Vor kurzem habe ich über eine Fehlermeldung mit WCF geschrieben die nicht wirklich etwas über den Fehler aussagte. Damals ging es um das Laden von Daten. Also vom WCF Host (Server) auf den Client.

Damals schieb ich: “Was mir dabei auffiel, die Einstellung muss nur auf der Client Seite gemacht werden. Auf der Serverseite konnte ich alles so sein lassen wie vorher.”

Jetzt wollte ich das selbe Objekt speichern. Also vom Client auf den Server schicken. Und es machte booom. Die Fehlermeldung war/ist dabei auch sehr aussagekräftig. Nur wusste ich jetzt in welcher Richtung ich suchen musste.

Die Exception meldete etwas in der Form:

"System.ServiceModel.CommunicationException" wurde aufgefangen.
  Message="Die Socketverbindung wurde abgebrochen. Dies kann durch einen Fehler beim Verarbeiten der Nachricht, durch ein Überschreiten des Empfangstimeouts durch den Remotehost oder durch eine Problem bei der zugrundeliegenden Netzwerkressource verursacht sein. Lokaler Sockettimeout: \"00:00:59.9989999\"."

SocketTimeout?! Na ja, ich dachte mir schon das es wahrscheinlich etwas mit der Grösse des zu übertragenden Objektes zu tun haben könnte. Also habe ich auf der Serverseite die app.config für den WCF Host angepasst.

<netTcpBinding>
  <binding name="Core" maxReceivedMessageSize="10485760">
    <security mode="TransportWithMessageCredential">
      <message clientCredentialType="UserName" />
      <transport clientCredentialType="None"/>
    </security>
  </binding>
</netTcpBinding>

Die Änderung ist in Zeile 2. maxReceivedMessageSize war schon beim letzten Posting zum Thema schuld.

Das ganz nochmals ausgeführt bekam ich aber noch immer eine Fehlermeldung. Diese war aber nun so präzise das ich das Problem damit auch beheben konnte.

"… Die InnerException-Nachricht war \"Fehler beim Deserialisieren des Objekts \"vom Typ Library.Person\". Die maximale Arraylänge (16384) wurde beim Lesen von XML-Daten überschritten.

Hier weiss man doch sofort was zu tun ist.

<netTcpBinding>
  <binding name="Core" maxReceivedMessageSize="10485760">
    <readerQuotas maxArrayLength="10485760"/>
    <security mode="TransportWithMessageCredential">
      <message clientCredentialType="UserName" />
      <transport clientCredentialType="None"/>
    </security>
  </binding>
</netTcpBinding>

Zeile 3 löste das Problem. OK, die Zahl ist sicher übertrieben hoch. Ich frage mich aber so oder so wie so man WCF nicht irgend wie in verschiedenen Modis betreiben kann. Ein Modi für Internet, mit all seinen Einschränkungen und ein Modi für Interne Firmenanwendungen wo die diversen Grenzen viel höher liegen.

Ich muss ja Windows auch nicht anders konfigurieren wenn ich eine 100MB Datei aus dem eigenen LAN laden will.

kick it on dotnet-kicks.de

Tags: , , ,

Entwicklung

Pingbacks and trackbacks (1)+

Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading

Statistik

Gesamte Posts: 1018
Dieses Jahr: 0
Diesen Monat: 0
Diese Woche: 0
Kommentare: 922
Total Bewertungen: 84
Ø Bewertung: 4,37
Meisten Kommentare
Google+ ... (28)
Beste Ø Bewertung
Tryton - Teil 6 - Installation ... (5)
Meiste Bewertungen
Windows 7 und die ersten Erfah ... (5)

Buttons

Benutzerprofil von GENiALi connection speed test network connection Bloggeramt.de Slug.ch Blog Verzeichnis und Blog Webkatalog Schumacher Roland Seitwert Valid XHTML 1.0 Transitional