Pergunta

Temos um servidor singleton remoto em execução em um serviço separado do Windows (vamos chamá-lo de RemotingService).Os clientes do RemotingService são instâncias ASP.NET (muitas, muitas).

Atualmente, os clientes de comunicação remota chamam RemotingService e bloqueiam enquanto a chamada RemotingService é atendida.No entanto, o serviço remoto está ficando complicado o suficiente (com mais chamadas RPC e algoritmos complexos) para que os threads de trabalho do asp.net sejam bloqueados por um tempo significativamente longo (4 a 5 segundos).

De acordo com este artigo do MSDN, fazer isso não será bem dimensionado porque um thread de trabalho do asp.net está bloqueado para cada RPC de comunicação remota.Ele recomenda mudar para manipuladores assíncronos para liberar threads de trabalho do asp.net.

O objetivo de um manipulador assíncrono é liberar um thread do pool de threads ASP.NET para atender solicitações adicionais enquanto o manipulador está processando a solicitação original.

Isso parece bom, exceto que a chamada remota ainda ocupa um thread do pool de threads.Este é o mesmo pool de threads que os threads de trabalho do asp.net?

Como devo transformar meu servidor singleton remoto em um sistema assíncrono para liberar meus threads de trabalho do asp.net?

Provavelmente perdi algumas informações importantes. Informe-me se houver mais alguma coisa que você precise saber para responder à pergunta.

Foi útil?

Solução

A ideia por trás do uso do ThreadPool é que através dele você pode controlar a quantidade de threads síncronos e, se houver muitos, o pool de threads gerencia automaticamente a espera de threads mais recentes.

O thread trabalhado do Asp.Net (AFAIK) não vem do Thread Pool e não deve ser afetado pela sua chamada para o serviço de comunicação remota (a menos que este seja um processador muito lento e sua função de comunicação remota exija muito da CPU - em que caso, tudo no seu computador será afetado).

Você sempre pode hospedar o serviço remoto em um servidor físico diferente.Nesse caso, seu thread de trabalho do asp.net será totalmente independente de sua chamada de comunicação remota (se a chamada de comunicação remota for chamada em um thread separado).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top