Hallo zusammen,
ich habe einen IErrorHandler geschrieben,
welcher den SOAP Header ausliest und wenn der username/Passwort nicht da/ falsch/ irgendwas nicht passt wird eine Rückantwwort gegeben.
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
Contract.Assume(fault != null);
if (error.Message.Contains("There is not a header with name AuthenticationHeader")
|| error.Message.Contains("Unknown Username or Incorrect Password"))
{
var resp = new Response{ returnCode = "7", returnText = ErrorMessages.ReturnMessage_7 };
fault = Message.CreateMessage(version ?? MessageVersion.Default, "Fault", resp);
}
}
Wenn ich das zurückgebe, kann er am Client das Response Model nicht richtig Mappen.
Wenn ich ohne IErrorHandler arbeite und nur das Model in dem Service zurückgebe, klappt es.
Ich tippe also darauf, dass der Fehler im Message.CreateMessage liegt.
Jmd ne Idee ?
Grüße
Also der IErrorHandler scheint nicht das zu können was ich brauche.
Werde/Habe es nun anders gelöst
Hallo Ahrimaan,
dann wäre es nur im Sinne des Forums, wenn du deine Lösung auch hier postest. Dann kann der nächste, der das Problem hat, davon profitieren.
Du prüfst bei deinem Code auf Strings. Da muss nur ne andere Sprache kommen oder die Meldung sich ändern oder oder oder und schon greift bei dir nichts mehr. Hoffentlich ist das kein produktiver Code.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hi,
es ist leider nicht direkt eine Lösung, eher ein Workaround:
Im IDispatcherMessageInspector schmeist man keine Exception sondern schreibt mithilfe von
OperationContext.Current.IncomingMessageProperties seine Property in den Context.
Wenn man dann im eigtl. ServcieContract angekommen ist, übergibt man den Context zB in eine Hilfsklasse und prüft seine bedingungen ob alle "Prüfroutinen" durchgelaufen sind und reagiert dort mit einem korrektem Rückgabemodel.
Ich suche immer noch eine "schönere" Lösung, sobald ich was habe poste ich diese sonst gerne
Grüße
Ahrimaan