Domanda

Abbiamo un server singleton remoto in esecuzione in un servizio Windows separato (chiamiamolo RemotingService).I client di RemotingService sono istanze ASP.NET (molti molti).

Attualmente, i client remoti chiamano RemotingService e si bloccano mentre la chiamata RemotingService viene gestita.Tuttavia, il servizio remoto sta diventando abbastanza complicato (con più chiamate RPC e algoritmi complessi) da bloccare i thread di lavoro di asp.net per un tempo notevolmente lungo (4-5 secondi).

Secondo questo articolo di msdn, questa operazione non si ridimensionerà correttamente perché un thread di lavoro asp.net è bloccato per ogni RPC remoto.Si consiglia di passare ai gestori asincroni per liberare i thread di lavoro asp.net.

Lo scopo di un gestore asincrono è quello di liberare un thread di pool di thread ASP.NET per servire ulteriori richieste mentre il gestore sta elaborando la richiesta originale.

Sembra che vada bene, tranne per il fatto che la chiamata remota riprende ancora un thread dal pool di thread.È lo stesso pool di thread dei thread di lavoro asp.net?

Come dovrei trasformare il mio server singleton remoto in un sistema asincrono in modo da liberare i thread di lavoro asp.net?

Probabilmente ho perso alcune informazioni importanti, per favore fammi sapere se c'è qualcos'altro che devi sapere per rispondere alla domanda.

È stato utile?

Soluzione

L'idea alla base dell'utilizzo di ThreadPool è che attraverso di esso è possibile controllare la quantità di thread sincroni e, se questi diventano troppi, il pool di thread gestisce automaticamente l'attesa dei thread più recenti.

Il thread lavorato Asp.Net (AFAIK) non proviene dal pool di thread e non dovrebbe essere influenzato dalla chiamata al servizio remoto (a meno che non si tratti di un processore molto lento e la funzione remota utilizzi molto la CPU, in cui caso, tutto ciò che è sul tuo computer sarà influenzato).

Puoi sempre ospitare il servizio remoto su un server fisico diverso.In tal caso, il thread di lavoro asp.net sarà totalmente indipendente dalla chiamata remota (se la chiamata remota viene chiamata su un thread separato).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top