8 Stimmen

WCF zwingen, bei jeder Anfrage eine Methode aufzurufen, bevor die eigentliche Funktion aufgerufen wird

Ich habe einen RESTful WCF-Dienst mit vielen verschiedenen Funktionen. Für jede Funktion muss ich eine Authentifizierungsmethode aufrufen, die ich geschrieben habe. Ich kann diese Methode bei jeder Anforderung manuell aufrufen, aber ich habe nach einer Möglichkeit gesucht, die WCF-Engine zu zwingen, diese Methode aufzurufen, bevor diese Funktionen eingegeben werden. Weiß jemand, ob dies möglich ist?

Prost

7voto

Subbu Punkte 254

Sie könnten den Ansatz "Benutzerdefiniertes Verhalten" verwenden.

Sie müssen eine Klasse schreiben, die Folgendes implementiert IDispatchMessageInspector . Der folgende Artikel des MSDN-Magazins gibt eine gute Erklärung dafür: Erweitern von WCF mit benutzerdefinierten Verhaltensweisen (Link verweist auf eine in der Wayback Machine zwischengespeicherte Kopie; Downloads funktionieren wahrscheinlich nicht) .

2voto

AbhishekS Punkte 71

Um WCF REST Service zu zwingen, zuerst eine Methode aufzurufen, insbesondere wenn es um die Autorisierung geht Anpassen/Überschreiben CheckAccessCore Methode der System.ServiceModel.ServiceAuthorizationManager beziehen: http://msdn.microsoft.com/en-us/library/ms731774(v=vs.110).aspx

0voto

marc_s Punkte 701497

Sie könnten darüber nachdenken, einen WCF-Routing-Dienst zu erstellen. Sie würden einen festen Endpunkt aufrufen - Ihre Authentifizierungsmethode - und dann von dort aus Ihre Aufrufe an die tatsächlichen Methoden weiterleiten, basierend auf einigen Angaben in der Anfrage.

Für .NET 4 wird die Routing Service-Funktionalität in WCF von Haus aus enthalten sein.

Was ich nicht weiß, ist, wie das alles mit REST zusammenpasst.

0voto

mafu Punkte 30024

Wenn es um die Autorisierung geht, können Sie dann nicht die eingebauten Dienste nutzen?

Zum Beispiel gibt es die PrincipalPermission Attribut. Ist das in Ihrem Fall hilfreich?

-3voto

Dot_NET Pro Punkte 2097

Ich stieß auf diesen Beitrag, während der Suche nach der gleichen thing.None der Antwort waren einfache/schnelle Lösung, wenn Sie nur eine Funktion vor jeder Methode aufgerufen werden möchten, dann können Sie tun, was ich gerade tat:

Ich habe eine zero argument constructor :

public class myService : ImyService 
{
    myService ()
    {
        ConnectToDatabAse();
        FunctionYouWantToCallBeforeEveryMethodCall(); 
        //Add here more
    }
}

0 Stimmen

Constructor ist kein Ort für Datenzugriff, Authentifizierung oder Anwendungslogik.

0 Stimmen

Es funktioniert nur, wenn Sie zustandslose (sitzungslose) Kommunikation verwenden.

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