Ho un servizio WCF duplex di lavoro con WSDualHttpBinding
. Il mio problema è trovare un modo per memorizzare il canale di callback con un ID univoco. Il servizio è destinato a essere di lunga durata. Posso semplicemente prendere il valore di ritorno OperationContext.Current.GetCallbackChannel()
quando viene chiamato un metodo "Iscriviti" e memorizzarlo in un elenco o dizionario? È garantito che sia valido fino a quando la connessione è attiva?Identificazione dei client in un servizio WCF
risposta
Il modo più semplice sarebbe avere il client inviare un valore chiave nel metodo Iscriviti del servizio. È quindi possibile salvare il canale di richiamata in un dizionario. Questo dizionario dovrebbe probabilmente essere una variabile statica o una classe singleton la cui durata è maggiore della durata della classe di servizio poiché la maggior parte della classe di servizio ha una durata di PerCall e viene eliminata dopo il completamento della chiamata di servizio. Attenzione ai problemi di threading!
Il canale di richiamata può essere riscontrato in qualsiasi momento sul client o sul lato assistenza. Il servizio deve gestire la possibilità di un canale guasto e rimuovere il canale guasto dal dizionario. WSDuallHttpBinding è un'associazione "stateless" in modo che eventuali errori nel client non vengano rilevati sul lato del servizio finché il servizio non tenta di chiamarli. NetTcpBinding solleverà l'evento ChannelFaulted se il client si trova in uno stato di errore. Per questo motivo raccomando NetTcpBinding se soddisfa i tuoi requisiti.
public bool Subscribe(string id) {
ICallback callback = OperationContext.Current.GetCallbackChannel();
if (!_activeCallbackChannels.Contains(id)) {
_activeCallbackChannels.Add(id, callback);
return true;
}
else {
return false;
}
}
- 1. Identificazione ID client WCF
- 2. Durata servizio client WCF
- 3. Ottenere un elenco di client connessi per un servizio wcf
- 4. Client e server WCF
- 5. Client servizio Web WCF che utilizza un CookieContainer
- 6. Client WCF in un'app universale
- 7. Distribuzione di un servizio WCF
- 8. Identificazione dei display
- 9. Servizio WCF vs servizio Windows
- 10. Inizializzazione proxy client WCF
- 11. Ottieni l'indirizzo IP dei client in un servizio web RemObjects
- 12. Un servizio WCF è un servizio Web?
- 13. Come utilizzare IDispatchMessageInspector in un servizio WCF?
- 14. Instantf client WCF
- 15. Servizio WCF che restituisce un altro servizio (fabbrica di servizi?)
- 16. Servizio dominio vs servizio WCF?
- 17. Servizio WCF Throttling
- 18. serializzazione oggetto servizio WCF
- 19. Client WCF: forzatura degli spazi dei nomi globali
- 20. Gestione del client disconnessione nel servizio WCF duplex
- 21. Come collegare client Java di servizio WCF utilizzando clientCredentialType = "Basic"
- 22. Servizio WCF per molti client simultanei e accesso al database
- 23. trasparente GZIP decompressione dei POST dati per WCF Resto Servizio
- 24. Client di test WCF che non carica il servizio
- 25. Errore client test WCF: impossibile richiamare il servizio
- 26. Più chiamate WCF concomitanti da singolo client a servizio
- 27. Ignora autenticazione certificazione su client Axis per servizio WCF
- 28. Passa le credenziali da un servizio Wcf a un altro servizio Wcf
- 29. Perché ottengo ActionNotSupportedException per il mio client/servizio WCF?
- 30. Servizio WCF con Qt?