2009-11-03 5 views
5

Come è possibile enumerare una sorta di identificatore di posizione per tutti i client connessi per un servizio host? Sto usando una connessione duplex per calcoli di lunga durata. L'host del servizio è un singleton.Ottenere un elenco di client connessi per un servizio wcf

Riesco a capire (in .net 3.5) l'ip del client chiamante, ma non sono sicuro di come ottenere l'IP di tutti i client connessi.

risposta

1

Non credo che ci sia qualcosa di integrato, ma sarebbe piuttosto facile creare un monitoraggio IServiceBehavior + IDispatchMessageInspector che ispezionerebbe RemoteClientEnpointMessageProperty prima che la chiamata venga inviata al servizio impl e attaccherà l'IP del client in un elenco condiviso e rimuoverlo quando termina la chiamata/sessione.

2

Per impostazione predefinita, WCF promuove l'utilizzo di servizi "per chiamata", ad es. il tuo cliente chiama, la richiesta viene gestita e quindi il client viene disconnesso di nuovo subito.

WCF non si presta troppo bene e non è concepito per connessioni a esecuzione prolungata, quindi non è possibile "enumerare gli utenti attualmente connessi" poiché non ce ne sono (o solo per una frazione di un secondo).

WCF non è come un server di dominio Windows in cui si accede e si resta connessi per un periodo di tempo prolungato.

+0

Spiacente di non essere stato chiaro nel mio post ma non sto utilizzando il comportamento predefinito del servizio. [ServiceBehavior (InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] Con InstanceContexMode.Single esiste un'istanza con una durata maggiore rispetto alla modalità predefinita "per chiamata". Il servizio come implementato attualmente utilizza un contratto di callback per inviare i risultati quando sono pronti. Il client memorizza nella cache la sua connessione con il server in modo che possano essere utilizzati per più richieste. Le connessioni sono di lunga durata. – Sindhudweep

+0

OK - Non penso che sia una buona idea, ma non conosco i dettagli del tuo setup; sfortunatamente, in WCF 3.5, non c'è molto supporto per la gestione e la sorveglianza - questo farà parte del progetto "Dublino" - un add-on di gestione per IIS7/WAS programmato per essere spedito dopo .NET 4 (marzo 2010)). –