Laden...

WCF: Eigene Exceptions in Faults übertragen

Erstellt von katarch vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.828 Views
K
katarch Themenstarter:in
55 Beiträge seit 2007
vor 15 Jahren
WCF: Eigene Exceptions in Faults übertragen

Hallo,
ich habe einen WCF-Service geschrieben, der natürlich auch eigene
Exceptions zum Client liefern soll. Als Beispiel sein genannt "Suche
liefert zu viele Ergebnisse".
Dies habe ich mittels eigener Exception erzeugt. Die erzeugte
Exception packe ich in eine eigene ServiceException, die von der
Servicefassade auf Serverseite erstellt wird und innerhab einer
FaultException<T> an den Client gesendet werden soll.

public List<...> Search...(...)
{
    try
    {
        return ...Manager.Search...(...);
    }
    catch (Exception ex)
    {
        ServiceFaultException sfex = new ServiceFaultException("",
ex);
        throw ServiceExceptionWrapper.WrapException(ex);
    }

}

public static FaultException<T> WrapException<T> (T exception)
where T : Exception
{
    // zusätzliche Arbeiten
    FaultException<T> fault = new FaultException<T>(exception,
exception.Message);
    return fault;

}

Am Client kommt aber immer nur eine CommunicationException an.

"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:58.9810000\".
{System.ServiceModel.CommunicationException}

Was muss ich machen, um auch am Client die Meldungen, die ich gesendet
habe, auswerten zu können? Ich möchte hier aber keine quick-and-dirty-
Lösung bauen.

Andreas

T
66 Beiträge seit 2006
vor 15 Jahren

Ich hab die selbe Frage.

Reicht es einfach die Exception als DataContract zu markieren?

664 Beiträge seit 2005
vor 15 Jahren

Hallo zusammen,

ihr müsst bei der Methode einen FaultContract für die Exception hinzufügen.

 [OperationContract]
[FaultContract(typeof(<Exception>))]
string SayHello(string name);