2016-04-13 4 views
0

Ich erstelle einen WFC Restful-Dienst, und es muss eine Variable bestehen bleiben, die pro Benutzer bestehen bleibt. Gibt es eine Möglichkeit, dies zu erreichen, ohne die Variable an alle zu übergeben meine Anrufe?Eine Variable in der WCF-Anwendung pro Instanz beibehalten

Ich benutze versuchen, den Prozess des Benutzers während des Prozesses, wetter ihre Anfrage ist fehlgeschlagen oder erfolgreich, IP-Adresse, wenn sie die Aktion, Ausfallzeit, etc. Bitte beachten Sie, ich bin neu in WCF, Danke im Voraus.

+0

Ich bin sicher, Sie können, aber Sie sollten nicht - siehe [Wenn REST-Anwendungen statusfrei sein sollen, wie verwalten Sie Sitzungen?] (Http://stackoverflow.com/questions/3105296/if-rest -Anwendungen-Soll-Sie-werden-Stateless-How-Do-Sie-verwalten-Sitzungen) – stuartd

+0

Suchen Sie eine Identifikation für eine einzelne Anfrage oder für mehrere verwandte Anfragen? Wenn es Ersteres ist, dann ist es immer noch "zustandslos" - Sie korrelieren nur Aktivitäten, die innerhalb dieser Anfrage ausgeführt werden. –

+0

Ich bin auf der Suche nach einer einzigen Anfrage, der Anruf wird mit einer ClientID kommen und ich möchte diesen Wert während dieses Aufrufs tragen, ohne dass es eine Abhängigkeit für jeden Methodenaufruf, auf den zugegriffen wird. – mahlatse

Antwort

0

Ich habe kürzlich daran gearbeitet (außer es war nicht RESTFUL). Sie können Informationen über HTTP-Header übertragen und diese Informationen auf der Serviceseite extrahieren. Siehe http://trycatch.me/adding-custom-message-headers-to-a-wcf-service-using-inspectors-behaviors/

+0

mein Problem ist nicht der Wert, ich habe ein paar Schichten in meiner Anwendung, also möchte ich einen Wert, auf den ich über die Schichten zugreifen kann, die für diesen bestimmten Anruf eindeutig sein werden. – mahlatse

+0

Haben Sie Zugriff auf OperationContext.Current? –

0

Für die Client-ID selbst kann ich zwei Stellen vorschlagen, um es zu setzen. Einer ist . Ein weiterer ist CorrelationManager.StartLogicalOperation, mit dem Sie eine logische Operation definieren können - das kann die Serviceanforderung sein, von Anfang bis Ende - oder mehrere Operationen - und eine eindeutige ID für jede Operation abrufen.

Ich würde in Richtung letzteres neigen, weil es Teil von System.Diagnostics ist und Abhängigkeiten auf System.ServiceModel verhindern können. (Der Name CorrelationManager beschreibt sogar, was Sie zu tun versuchen.)

In jedem Fall würde ich auf Abfangen betrachten. Das ist der ideale Weg, um den Wert zu lesen (wo auch immer Sie ihn speichern), ohne die einzelnen Methoden mit Wissen über Protokollierung und Client-IDs zu verschmutzen. (Ich habe aus Ihrer Nachricht gesehen, dass Sie versuchen, diese direkte Abhängigkeit von den Client-IDs zu vermeiden.)

Hier sind einige documentation zum Hinzufügen von Windsor zu Ihrem WCF-Dienst. (Irgendwann werde ich eine End-to-End-Dokumentation in meinem Blog hinzufügen.) Wenn Sie Windsor dann zum Instanziieren Ihrer Dienste verwenden, können Sie damit auch die Abhängigkeiten instanziieren und interceptors um sie herum platzieren Ihre Protokollierung vor oder nach diesen Abhängigkeiten erledigt ihre Arbeit. Innerhalb dieser Interzeptoren können Sie auf diesen Stapel logischer Operationen zugreifen oder diesen ändern.

Ich mache Windsor Gerechtigkeit nicht, indem ich einige Verbindungen ausstoße. Ich möchte es mit einigen Blogposts ausstatten. Aber ich empfehle, es zu untersuchen. Es ist nützlich für viele Gründe - Abhören nur eines. Es hilft bei der Erstellung von Services und Abhängigkeiten.

Update - Ich fügte eine blog post - wie Windsor zu einem WCF-Dienst in fünf Minuten hinzufügen.

+0

Ich habe dies aktualisiert, um auf einen Blogbeitrag zu verweisen, den ich letzte Nacht gemacht habe und der zeigt, wie Windsor schnell und einfach zu einem WCF-Dienst hinzugefügt werden kann. Das wiederum gibt Ihnen einige Abhörmethoden, mit denen Sie arbeiten können. Zu einem späteren Zeitpunkt werde ich eine Dokumentation über Interzeptoren machen, aber der Link zu Windsors Dokumentation in der Antwort wird Sie weiterbringen. –

Verwandte Themen