WCF-Zugriff Verweigerte Ausnahme kehrt nach CheckAccessCore nicht zum Client zurück

8

Ich habe einen WCF-Dienst mit TransportWithMessageCredential security konfiguriert. Alle drei Implementierungen für IAuthorizationPolicy , ServiceAuthenticationManager und ServiceAuthorizationManager sind vorhanden und effektiv.

%Vor%

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:

%Vor%

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 :

%Vor%

WCF-Ablaufverfolgung:

    
Mohsen Afshin 02.06.2016, 06:02
quelle

2 Antworten

1

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.

    
LeBaptiste 15.06.2016 10:20
quelle
0

Bitte versuchen Sie den Code wie folgt zu ändern:

%Vor%     
DInesh AG 17.06.2016 11:05
quelle