3 Stimmen

WCF - Übergabe von CurrentPrincipal im Header

Ich habe einen WCF-Dienst, der den Principal des aufrufenden Benutzers kennen muss.

Im Konstruktor des Dienstes habe ich:

Principal = OperationContext.Current.IncomingMessageHeaders.GetHeader<MyPrincipal>("myPrincipal", "ns");

und in dem aufrufenden Code habe ich etwas wie:

        using (var factory = new ChannelFactory<IMyService>(localBinding, endpoint))
        {
            var proxy = factory.CreateChannel();
            using (var scope = new OperationContextScope((IContextChannel)proxy))
            {
                var customHeader = MessageHeader.CreateHeader("myPrincipal", "ns", Thread.CurrentPrincipal);
                OperationContext.Current.OutgoingMessageHeaders.Add(customHeader);

                newList = proxy.CreateList();
            }
        }

Das alles funktioniert gut.

Meine Frage ist, wie kann ich vermeiden, dass ich alle Proxy-Methodenaufrufe in die using (var scope...{ [create header and add to OperationContext] ?

Könnte ich eine benutzerdefinierte ChannelFactory erstellen, die das Hinzufügen des myPrincipal-Headers zum Operationskontext übernimmt? So etwas würde mir eine Menge Kopieren/Einfügen ersparen, was ich lieber nicht tun würde, aber ich bin mir nicht sicher, wie ich es erreichen kann:)

Gracias

3voto

Marc Gravell Punkte 970173

Der richtige Zeitpunkt für das Setzen eines WCF-Principals ist über IAuthorizationPolicy durch Angabe einer benutzerdefinierten Richtlinie in der Konfiguration. Dies wird ausführlich behandelt aquí . Wenn Sie versuchen, den Auftraggeber an anderer Stelle (z. B. bei einem Inspektor) festzulegen, kann er vom System zurückgesetzt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X