Laden...

WCF: MTOM Encoding und IErrorHandler

Erstellt von Ahrimaan vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.469 Views
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 9 Jahren
WCF: MTOM Encoding und IErrorHandler

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

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 9 Jahren

Also der IErrorHandler scheint nicht das zu können was ich brauche.
Werde/Habe es nun anders gelöst

2.207 Beiträge seit 2011
vor 9 Jahren

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

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 9 Jahren

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