Ciao a tutti,
ho una domanda da porvi, sulla quale mi sono documentato, ma vorrei dei consigli, magari da chi ha già realizzato e testato una soluzione dello stesso tipo che vi elenco ora.
Ho creato un servizio WCF che attualmente espone due metodi, il primo metodo (
Validazione) è abbastanza banale, si occupa di ricevere una stringa in input la quale viene acqusita e tramite l'ausilio di SQL Server viene cercata su Database e al client viene restitutito un dettaglio delle informazioni recuperate. Il secondo metodo (
Acquisizione) invece riceve un dettaglio di informazioni che nel tempo potrebbe anche crescere, anzi di sicuro, il server web acquisisce questi dati ed esegue una serie di operazioni su database, ho delegato tutte queste operazioni di inserimento/aggiornamento a delle stored procedure e se tutto va a buon fine il metodo restituisce una conferma al client che il dato è stato acquisito correttamente.
Ora il mio problema è il seguente, potenzialmente potrei ricevere molteplici richieste al mio servizio nell'ordine delle 1000 richieste e sicuramente molte di queste avverranno simultaneamente, questo porterà il server web a dover gestire le chiamate di entrambe i metodi facendo così salire il numero di contatti ad un ipotetico 2000.
Dando per scontato che il server su cui sarà presente IIS 7 sarà un server molto prestante, come posso strutturare la soluzione in modo che le risposte alle chiamate dai client non vadano in timeout.
Inizialmente ho pensato di scindere i 2 metodi in 2 servizi separati in quanto in realtà il servizio di Acquisizione sarà chiamato da un numero limitato di client (server remoti) ai quali arriveranno tutti i dati da "spedire" verso il mio server web, quindi in tal caso il numero di richieste si ridurrebbe inevitabilmente e questi server remoti eseguirebbero l'invio dei dati al server web chiamandolo in maniera sequenziale (il che non escluderebbe comunque la contemporaneità) essendo l'acquisizione un processo che per il servizio web comporta diverse operazioni di aggiornamento su Database.
La richiesta di validazione invece proverrà come detto prima sempra da tutti i client, ed eseguirà solamente poche query.
Domande:- Separando i 2 metodi in 2 servizi distinti ottimizzo la soluzione oppure no?
- Per il metodo di acqusizione ho pensato di delegare al servizio WEB la sola ricezione dei dati e di far eseguire l'acquisizione su database dei dati ad un processo locale su SERVER centrale. Può essere una soluzione intelligente?
- Come posso agire sui parametri ConcurrencyMode e InstanceContextMode che di default per WCF sono "Single" e "PerSession" in modo da servire tutte le richieste anche in caso di contemporaneità senza ottenere timeout, considerando l'accesso al Database SQL?
Al momento mi sono documentato su CodeProject per agire su questi parametri, ma vorrei dei consigli su come impostarli per la mia soluzione.
http://www.codeproject.com/Articles/86007/3-ways-to-do-WCF-instance-management-Per-call-Perhttp://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-andhttp://www.codeproject.com/Articles/33362/WCF-ThrottlingGrazie a tutti. ;)