WCF Durable Services è la scelta giusta?

Stiamo selezionando il metodo migliore per salvare lo stato tra le sessioni / chiamate WCF. Abbiamo scoperto che WCF DurableService si adatta alle nostre esigenze.

Ci piacerebbe sapere che questo è ok per l’uso pesante. Ci aspettiamo più di 1000 sessioni e ogni sessione avrà una durata di circa 100 KB di dati (formato serializzato xml), con object complesso (solo 1 object) da mantenere.

Date le nostre esigenze, WCF DurableServices è la soluzione giusta?

DurableService utilizza le funzionalità WCF integrate per comunicare lo stato (variabili a livello di modulo) al client utilizzando BasicHttpContextBinding o WSHttpContextBinding. Il meccanismo di persistenza dipende dai cookie HTTP sul client o dalle intestazioni soap per la memorizzazione dei dati serializzati tra le chiamate. La dimensione media dei messaggi di soap sarebbe di 100KB più il carico utile che i parametri operativi mantengono su ogni chiamata. È inoltre necessario progettare la semantica CanCreateInstance e CompleteInstance nei contratti operativi e nella logica dell’applicazione per rimuovere correttamente il carico utile della sessione.

DurableService molto probabilmente non sarà molto performante dato il tuo scenario di 1000+ sessioni simultanee e 100KB di dati di sessione. Per impostazione predefinita, i servizi WCF che abilitano sessioni di qualsiasi tipo sono limitati a 16 sessioni simultanee. Puoi aumentare quel numero ma dubito che sarai in grado di gestire più di 1000 sessioni su una singola istanza del server. Per molte sessioni è probabile che sia necessario utilizzare un servizio di bilanciamento del carico basato su hardware o software per più server host, il che rende ansible mantenere la sessione in caso di produzione anche con il cosiddetto supporto per affinità di sessione. Mi consiglia di utilizzare una progettazione di servizio senza stato per chiamata e rendere il codice dell’applicazione responsabile della gestione dello stato.