Feb 032010
 

Zur Zeit darf ich an einem grossen Projekt mitarbeiten das regen gebrauch von WCF macht. Die ganze Kommunikation zwischen Server und Client baut auf WCF auf.

Jetzt habe ich einige Zeit an einem Fehler gesucht bei dem die Meldung ziemlich irreführend war, wie sich jetzt zeigte.

Die Fehlermeldung ist in etwa so (gekürzt):

"System.ServiceModel.CommunicationObjectFaultedException" wurde aufgefangen.
  Message="Das Kommunikationsobjekt \"System.ServiceModel.Security.SecuritySessionClientSettings`1+ClientSecurityDuplexSessionChannel[System.ServiceModel.Channels.IDuplexSessionChannel]\" kann nicht zur Kommunikation verwendet werden, weil es sich im Faulted-Status befindet."

Wenn ich mir die Meldung jetzt so anschaue denke ich mir, dass scheint doch ein Problem mit der Security zu sein. So ganz klassisch. Berechtigungen auf irgend eine Ressource oder so.

Weit gefehlt. Hat nicht mit dieser Sicherheit zu tun. Es gibt im WCF noch eine andere Sicherheit. Die gegen DoS (Denial of Service) Angriffe. Das heisst, gewisse Grenzen sind im WCF definiert die nicht überschritten werden dürfen/können. Das ist zum Beispiel die maximale Nachrichtengrösse (maxReceivedMessageSize). Per Default auf 65’536 Byte beschränkt. Das gibt meinem Szenario nicht viel her. Als ich diesen Wert erhöhte kam die Fehlermeldung nicht mehr.

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. Hier ein Stück Code wie es gemacht werden kann.

private static T BindEndpoint<T>(string endPointAdress)
	where T : class
{
	EndpointAddress endpoint = new EndpointAddress(endPointAdress);

	NetTcpBinding binding = new NetTcpBinding();
	binding.MaxReceivedMessageSize = 10485760;

	ServiceClient<T> client = new ServiceClient<T>(binding, endpoint);

	return (T)client.InnerChannel;
}

Die Methode wir 1 zu 1 kopiert nicht einfach so funktionieren. Der relevante Teil ist in Zeile 7 zu finden. Die Nachrichtengrösse kann somit etwa 10MB betragen.

kick it on dotnet-kicks.de

Sorry, the comment form is closed at this time.