Feed
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

WCF – Irreführende Fehlermeldung Part II

by Roland Schumacher alias GENiALi 10. February 2010 -- 342 Wörter  -- 405 mal gelesen
Dieser Beitrag ist mir was wert:  

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)+

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Übersetzen

Diverses

Seitwert

Locations of visitors to this page

Rating
loading

Statistik