Mensagens assíncronas entre processos no .NET

5

(Fazendo isso aqui em vez de SO porque eu nem sei com que tecnologia marcá-lo):)

Minha equipe está prestes a embarcar em um projeto para converter uma grande parte de nossa base de código para usar E / S de arquivos assíncronos, já que nosso meio de armazenamento de arquivos está cada vez mais sendo localizado em uma conexão de alta latência. Temos alguma experiência básica com desenvolvimento assíncrono, mas isso é em uma escala maior do que o nosso trabalho anterior. Neste ponto, nem sei por onde começar procurando tecnologias, padrões ou documentação sobre como resolver esse problema.

A configuração básica na qual temos que trabalhar tem aplicativos cliente com uma interface de usuário que envia solicitações de arquivo para algum processo em segundo plano executado localmente, que realiza o trabalho real de comunicação com os serviços de armazenamento de arquivos para obter dados. (Essa camada "proxy" é necessária porque temos vários aplicativos cliente que precisam compartilhar os serviços de arquivos, os resultados armazenados em cache, etc.)

O design que tenho em mente seria que um cliente enviasse uma solicitação ao serviço, que por sua vez enviaria uma solicitação aos serviços de armazenamento de arquivos para iniciar um trabalho de E / S assíncrona. Conforme o progresso foi feito no download do arquivo, o serviço receberia notificações e, em seguida, dispararia algum tipo de mecanismo de retorno de chamada para o cliente de interface do usuário para relatar o processo e / ou a conclusão. Isso significa que preciso de algum tipo de mecanismo de processo cruzado para executar retornos de chamada.

Anteriormente, usamos os serviços duplex WCF para implementar algo semelhante a isso, mas não tenho certeza se isso funcionará corretamente em nosso caso atual. Em particular, queremos lidar com o caso em que um cliente envia uma solicitação e sai enquanto a recuperação está em andamento. O serviço precisa ser capaz de detectar que o cliente terminou mas manter baixando o arquivo; o que eu sei sobre os canais duplex do WCF implicaria que o fechamento do canal do cliente também encerraria o canal do serviço. Além disso, eu preferiria não exigir que o aplicativo cliente ficasse em algum tipo de loop de bloqueio giratório aguardando a conclusão da chamada assíncrona, mas, novamente, minha pesquisa levou-me a acreditar que os retornos de chamada duplex operam apenas dentro do contexto de uma única chamada do WCF, então precisaríamos manter o thread de chamada por toda a duração.

Quais outros mecanismos existem para registrar e enviar mensagens no estilo de retorno de chamada em todo o processo? A equipe preferiria uma solução totalmente gerenciada, embora eu esteja certamente aberto a opções não gerenciadas se elas forem significativamente melhores de alguma forma.

    
por KutuluMike 15.12.2011 / 23:22
fonte

1 resposta

4

Quanto aos padrões, o livro "Enterprise Integration Patterns" pode valer a pena.

Quanto às tecnologias, acho que um barramento de serviço, como o NServiceBus ou o MassTransit, pode ajudá-lo.

    
por 16.12.2011 / 00:05
fonte

Tags