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.
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
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. –
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