Ich versuche, eine bestimmte FaultException auf einem WCF-Client abzufangen. Ich muss im Grunde eine innere Beschreibung aus der Fehlerklasse extrahieren, so dass ich sie dann in eine andere Ausnahme für die oberen Schichten verpacken kann, um was auch immer zu tun.FaultException.Detail kommt leer zurück
Ich habe dies erfolgreich einige Male gemacht, was es anders macht, ist dieser Fehler als ein Array deklariert, wie Sie aus dem Service-Referenzattribut oben auf der Methode, die die Ausnahme auslöst, erkennen kann:
[System.ServiceModel.FaultContractAttribute(typeof(FaultClass[]), Action = "http://whatever/", Name = "whateverBusinessFault")]
Dies ist mein Code:
try
{
// call service here
}
catch (FaultException<FaultClass[]> ex)
{
if (ex.Detail != null && ex.Detail.Length > 0)
{
throw new CustomException(ex.Detail[0].description);
}
else
{
throw;
}
}
Problem ist Detail (die ein Array ist) kommt immer wieder leer im Code selbst wenn ich die Daten sehen kann (Beschreibungsfeld usw.) in der SOAP-Respo nse aus der WCF-Ablaufverfolgung.
Also das Zeug, das ich brauche, kommt definitiv zurück, aber aus irgendeinem Grund wird es entweder nicht deserialisiert oder ich kann es nicht vom Code bekommen.
Jede Hilfe wird geschätzt!
UPDATE:
Der Versuch, mit @Darin Vorschlag aber kein Glück, der Saite, die ich aus dem XmlReader bin Extrahieren "/ r/n":
var sb = new StringBuilder();
using (XmlReader reader = fault.GetReaderAtDetailContents())
{
while (reader.Read())
sb.AppendLine(reader.ReadOuterXml());
}
var detail = sb.ToString();
Sieht aus wie der Detailabschnitt ist kommt überhaupt nicht auf!
Was passiert, wenn Sie Ihren Code ändern (nur für den Test), um nur FaultClass zu verwenden (nicht Array)? –
bereits versucht, dass es die Ausnahme überhaupt nicht abfängt – JohnIdol
Diese Frage kann nicht beantwortet werden, ohne entweder eine Beispielfehlerantwort oder das tatsächliche Schema des benutzerdefinierten Fehlers in der WSDL definiert –