Ich habe einen WCF-Dienst mit TransportWithMessageCredential
security konfiguriert. Alle drei Implementierungen für IAuthorizationPolicy
, ServiceAuthenticationManager
und ServiceAuthorizationManager
sind vorhanden und effektiv.
Wie ich weiß, weist in der Klasse ServiceAuthorizationManager
in CheckAccessCore
eine return false
-Anweisung auf einen Zugriff verweigert hin. Das ist alles gut, bis ich will, dass die Clientseite weiß, dass er eine Zugriffsverweigerungsausnahme hat, bei der der Dienst nichts mehr an den Client zurückgibt, und es scheint, dass der Dienst-Thread gehängt wurde.
Ich habe alle Arten von try catch
auf der Client-Seite versucht und sogar einen FaultContract
zur Operation hinzugefügt, aber das Problem besteht nicht.
Alles, was ich sehen kann, sind zwei Fehlerereignisse in Diagnostics Tools.
Was fehlt in meinen Implementierungen, um den Service zu erhalten, um den Benutzer über den Fehler "Zugriff verweigert" zu informieren?
Aktualisieren
Es ist bemerkenswert zu sagen, dass ich RoutingService
benutze und jetzt schätze ich die wahre Ursache ist, dass RoutingService
irgendwie die Ausnahme isst, aber ich weiß nicht genau, wo das passiert. Obwohl ich in jede mögliche Methode eingetreten bin, aber ich habe es nicht gefunden.
Update 2
Ich habe IErrorHandler
an Stelle:
Aber bei diesem Ereignis wird der aufrufende Client die Ausnahme nicht bekommen und die gleiche 'unbehandelte Ausnahme' wird in Debug-Ereignissen erscheinen.
Die einzige Möglichkeit, dass ich den aufrufenden Client nicht erreichen kann, ist eine Ausnahme in BeforeSendReply
method von IDispatchMessageInspector
zu werfen, was meiner Meinung nach nicht der richtige Weg ist, da ich auf der Clientseite CommunicationException
erhalte FaultException
:
Sie sollten hier keine FaultException erwarten, sondern eine Kommunikationsausnahme, in Ihrem Fall eine SecurityAccessDeniedException . Ich erwarte, dass alle Ausnahmen, die in diesem Stadium angesprochen werden, Kommunikation 1 sind, da es sich um Kommunikationsprobleme handelt, Sicherheitsaspekte gehören dazu.
Tags und Links wcf c# security access-denied wcf-security