2009-11-03 8 views
5

Wie kann ich eine Art von Standortkennung für alle verbundenen Clients für einen Servicehost aufzählen? Ich verwende eine Duplex-Verbindung für lange laufende Berechnungen. Der Service-Host ist ein Singleton.Abrufen einer Liste verbundener Clients für einen WCF-Dienst

Ich kann (in .net 3.5) die IP des anrufenden Kunden herausfinden, aber ich bin unsicher, wie man die IP aller verbundenen Klienten erhält.

Antwort

1

Ich glaube nicht, dass dafür etwas eingebaut ist, aber es wäre ziemlich einfach, ein Tracking IServiceBehavior + IDispatchMessageInspector zu erstellen, das die RemoteClientEnpointMessageProperty überprüfen würde, bevor der Anruf an das Service-Impl gesendet wird und die Client-IP festlegt in eine freigegebene Liste und entfernen Sie sie, wenn der Anruf/die Sitzung beendet wird.

2

Standardmäßig fördert WCF die Verwendung von "pro Anruf" -Diensten, z.B. Ihr Client ruft an, die Anfrage wird bearbeitet und der Client wird sofort wieder getrennt.

WCF eignet sich nicht gut für und ist nicht für lang laufende Verbindungen gedacht - so können Sie nicht wirklich "die aktuell verbundenen Benutzer aufzählen", da es keine (oder nur für einen Bruchteil von eine Sekunde).

WCF ist nicht wie ein Windows-Domänenserver, in dem Sie sich anmelden und für einen längeren Zeitraum angemeldet bleiben.

+0

Entschuldigung, ich war nicht klar in meinem Beitrag, aber ich verwende nicht das Standard-Service-Verhalten. [ServiceBehavior (InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] Mit InstanceContexMode.Single gibt es eine Instanz mit einer längeren Lebensdauer als der Standardmodus "pro Aufruf". Der implementierte Dienst verwendet derzeit einen Rückrufvertrag, um die Ergebnisse zu senden, wenn sie fertig sind. Der Client speichert seine Verbindung mit dem Server im Cache, damit sie für mehrere Anforderungen verwendet werden können. Die Verbindungen sind langwierig. – Sindhudweep

+0

OK - Ich denke nicht, dass das eine sehr gute Idee ist, aber ich kenne die Details Ihrer Einrichtung nicht; Leider gibt es in WCF 3.5 nicht viel Unterstützung für Management und Überwachung - dies wird Teil des "Dublin" -Projekts sein - ein Management-Add-on für IIS7/WAS, das einige Zeit nach .NET 4 (März 2010) ausgeliefert werden soll). –

Verwandte Themen