Bei einer WCF-Applikation, die per wsHTTPBinding kommuniziert, werden Exceptions und Faults nicht vom Server an den Client zurückgeliefert.
Stattdessen wird beim manuellen Werfen einer **FaultException **gemeldet, dass keine Fehlerbehandlungsroutine dafür vorhanden ist.
Ich benutze quasi eine 08/15-Konfigurationsdatei.
Laut einem Artikel könnte es daran liegen, dass beim wsHTTPBinding standardmäßig **OneWay **gesetzt ist. Also einseitige Kommunikation.
Aber muß ich nun zur sinnvollen Fehlerbehandlung gleich komplett auf Duplex oder Async-Kommunikation umsteigen?
Verwirrend finde ich auch, dass in den ganzen WCF-Beispielen die man so findet, davon eigentlich nie die Rede ist.
Ok, das Problem konnte ich lösen.
Aber nun stellt sich eine andere Frage bezüglich Errorhandling bei WCF:
Jeder Zugriff auf den Proxyclient muß von ziemlich vielen catch-Klauseln begleitet werden, was bei vielen Funktionen ja furchtbar unübersichtlich wird.
try
{
BusinessLogic.UserMgr.LogOn(username);
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
BusinessLogic.AbortChannels();
}
catch (FaultException<NoUserAuthenticationFault> fault)
{
MessageBox.Show("Logon with user " + username + " failed");
BusinessLogic.AbortChannels();
}
catch (FaultException ex)
{
MessageBox.Show("SOAP-Error:" + ex.GetType().Name + " - " + ex.Message);
BusinessLogic.AbortChannels();
}
catch (CommunicationException commProblem)
{
MessageBox.Show("Communication problem: " + commProblem.Message + commProblem.StackTrace);
BusinessLogic.AbortChannels();
}
Wie geht ihr da vor? Für jede Clientfunktion eine Facade?