Laden...

[WCF] Faults zurückliefern

Erstellt von wdb.lizardking vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.490 Views
wdb.lizardking Themenstarter:in
100 Beiträge seit 2006
vor 16 Jahren
[WCF] Faults zurückliefern

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.

wdb.lizardking Themenstarter:in
100 Beiträge seit 2006
vor 16 Jahren

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?