WCF: Eigene Exceptions in Faults übertragen

22/01/2009 - 11:16 von Andreas | Report spam
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
 

Lesen sie die antworten

#1 Markus Springweiler
22/01/2009 - 14:03 | Warnen spam
Andreas,

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.
[..]
Am Client kommt aber immer nur eine CommunicationException an.
[..]
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.



Du benötigst ein [FaultContract(typeof(Exception))] im Service-Contract
bzw. bei den OperationContracts, welche davon Gebrauch machen -- und ein
anschließendes Update der Servicereferenz im Client.

/\/\arkus.

Ähnliche fragen