submetendo-se e monitorar um webservice não confiável
-
06-07-2019 - |
Pergunta
Estou construindo um site ASP.NET que irá coletar dados de um usuário e enviá-lo a um terceiro webservice festa. O webservice é pouco fiáveis ??e, por essa razão existe um serviço de backup.
Se uma chamada para o serviço primário falhar (timeout ou algum outro erro), então eu preciso para virar um pouco em uma classe estática que irá desarmar o sistema para usar o serviço secundário.
Neste ponto, eu preciso começar a votação o primeiro serviço (com dados fictícios) para ver se ele está de volta para cima (em que ponto I receberá um código de OK em troca). Neste ponto eu preciso virar a pouco para trás para que o site começa a usar o serviço primário novamente.
Eu tive uma leitura desta devo usar um serviço do Windows ou um segmento de segundo plano ASP.NET? e eu acho que separar o código em um serviço do Windows seria o método mais limpo de realizar a votação, mas então como é que eu comunicar com o appication web.
Um pensamento que eu tive é para expor um webservice que o serviço do Windows poderia usar para se comunicar dentro do webapp mas isso parece tanto confuso e over-matar.
Eu aprecio os seus pensamentos e experiências que executam tarefas semelhantes.
Graças
Solução
Eu acho que o serviço do Windows é o caminho a percorrer, definitivamente.
Como para a comunicação entre o serviço e o seu web site, a melhor resposta depende do tamanho e escala de sua solução. Se você está construindo algo que precisa ser confiável, eu sugiro que você implementar algum tipo de fila entre o seu site ASP.NET e seu serviço do Windows. Você tem um monte de opções aqui também, dependendo do orçamento e capacidade: BizTalk, MSMQ, e as filas do SQL Server (SSIS). Alternativamente, se você está procurando algo menor escala, eu recomendo que você acabou de colocá-lo em um algum lugar da tabela de banco de dados.
Gostaria de evitar o uso de arquivos no sistema de arquivos, porque você vai encontrar problemas com bloqueios de arquivos e multithreading. Também gostaria de evitar diretamente comunicar com o serviço porque o risco de perder a fila na memória se o serviço falhar por qualquer motivo.
Editado para adicionar:
Se a confiabilidade não é uma preocupação aqui, você poderia usar um WPF chamados-pipes serviço hospedado para a comunicação entre o seu site e seu serviço do Windows. Isso evita grande parte das despesas gerais que participam normalmente no clássico Web Services e é surpreendentemente rápido. A única desvantagem é que a auto-hospedagem de um serviço de WPF é complicado e pode ser difícil de manter o serviço.