Pergunta

Eu tenho vários aplicativos c # trabalho diferentes que executam várias tarefas contínuas: Envio de e-mails de fila, importadores novas encomendas a partir do banco de dados site para banco de dados de ordens, fazendo backups de banco de dados e restaurações, correndo de processamento de dados para OLTP -> OLAP e outras tarefas afins . Antes, eu liberei los como serviços do Windows, mas atualmente eu liberá-los como aplicativos de console regulares. Eles são todos baseados em um quadro comum corredor tarefa que eu criei, e estou feliz com isso, no entanto, eu não tenho certeza qual é a melhor maneira de implantar esses tipos de aplicações. I como a versão do console, porque é rápido e fácil, e é possível ver rapidamente atividade do programa e de saída. A desvantagem é que o computador trabalhador tem várias telas do console em execução e ele fica confuso. Por outro lado, o método de serviço parece levar muito tempo para implantar e eu tenho que passar por logs de eventos para ver mensagens. Quais são algumas experiências / comentários sobre isso?

Foi útil?

Solução

Eu gosto da abordagem aplicativo console. I normalmente têm coisas configurar para que eu possa passar um interruptor como -unattended que suprime a tela do console.

Outras dicas

Windows Service seria uma boa escolha, ele é executado em segundo plano, não importa se você fechar sessão atual, você também pode configurá-lo para iniciar automaticamente após o Windows reiniciar quando realizar uma atualização de correções no servidor. Você pode registrar mensagens importantes para visualizador de eventos ou a tabela de banco de dados.

Para uma coisa como esta, a maneira padrão de fazer isso é com os serviços do Windows. Você quer que o serviço seja executado na conta de rede para que ele não vai exigir um usuário conectado.

Eu trabalhei em algo há alguns anos que tinha problemas semelhantes. Logicamente eu precisava de um serviço, mas às vezes eu precisava ver o que estava acontecendo e, geralmente, eu queria uma história. Então, eu desenvolvi um serviço que fez o trabalho, a qualquer hora que queria log, que chamou à sua assinantes (implementado como um padrão de observador).

O serviço registrada é logger próprios dados (escrevendo para um banco de dados) e em tempo de execução, o usuário pode executar uma GUI que ligava para o serviço usando comunicação remota para se tornar um ouvinte ao vivo!

Vou voto para Windows Services. Vai chegar a ser uma verdadeira dor gestão desses aplicativos de console.

Implementação do serviço Windows é fácil: após a instalação inicial, basta desligá-los e fazer um XCOPY. Não há necessidade de executar qualquer instaladores complicado. É apenas semi-complicada pela primeira vez, e mesmo assim é apenas

installutil MyApp.exe

configre os serviços para ser executado sob uma conta de domínio para a melhor segurança e de interoperabilidade mais fácil com outras máquinas.

Use uma combinação de logs de eventos (com erro, aviso e informação) para notificações importantes, e simplesmente despejar detalhado log para um arquivo de texto.

Por que não obter o melhor de todos os mundos e usar algo como:
http://topshelf-project.com/

Ele permitirá que você execute o seu programa como linha de comando ou um serviço do Windows.

Eu não tenho certeza se isso se aplica a suas aplicações ou não, mas quando eu tenho alguns aplicativos de console que não são dependentes de entrada do usuário ou eles são o tipo de aplicações que apenas fazer o seu trabalho e sair, eu corro tais programas em um servidor virtual, desta forma, não vejo uma tela aparecendo quando estou trabalhando, e os servidores virtuais são fáceis de criar e reiniciar.

Nós utilizam regularmente os serviços do Windows como os processos de fundo. Eu não gosto de aplicativos de linha de comando como você precisa estar conectado ao servidor para eles a correr. Serviços executados em segundo plano o tempo todo (assumindo que eles são auto-start). Eles também são trivial para instalar w / o sc.exe ferramenta de linha de comando que está em janelas. Eu gosto melhor do que o inchaço-ware que é installutil.exe. Claro installutil faz mais, mas eu não preciso que ele faz. Eu só quero registrar meu serviço.

Também criamos uma infra-estrutura onde temos um serviço genérico .exe que carrega DLLs com base em uma definição de interface, assim que adicionar um novo "serviço" é tão simples como deixar cair em uma nova DLL e reiniciar o serviço de acolhimento.

No entanto, começamos a afastar-se de serviços. O problema que temos com eles é que eles trancar as DLLs (por razões óbvias) por isso é uma dor de atualizá-los. Precisamos parar, atualizar e reinicie. Não é difícil, mas medidas adicionais. Em vez disso estamos nos movendo para "páginas" especiais em nossos aplicativos ASP.NET que são executados os trabalhos de fundo reais que precisa fazer. Há ainda um serviço, mas tudo o que ele invocar as páginas ASP.NET para que ele não bloquear qualquer um dos nossos DLLs. Então, podemos substituir as DLLs no diretório bin asp.net e regras asp.net normais para app-domínio restart chute no.

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