Qual seria a melhor maneira de manter as configurações editável pelo usuário para um serviço do Windows?

StackOverflow https://stackoverflow.com/questions/1202835

Pergunta

Estou desenvolvendo um aplicativo que vai ser implementado como um Windows Service e eu queria saber O que foi que a melhor maneira de lidar com o diferente Configurações ( a nível aplicativo de usuário e). A coisa é, eu não estou completamente familiarizado (ainda) com todas as opções disponíveis, por isso, em princípio, estou favorecendo do .NET própria System.Configuration (ConfigurationManager.RefreshSection ( "appSettings") parece tentadora ), embora eu ainda estou deixando de envolver minha cabeça em torno de toda a imagem, ou seja, onde está o app.config arquivo que está sendo armazenado para um determinado serviço, assim por diante.

Então, minha pergunta para vocês é, qual seria a melhor maneira de armazenar detalhes de configuração editável pelo usuário para um determinado serviço do Windows? Obrigado a todos com antecedência para o feedback.

Foi útil?

Solução

Hmmm ... definições de configuração 'editável pelo usuário' para um serviço do Windows ...

A única coisa a ter em mente é que o serviço do Windows é executado em segundo plano, para que ele não tem uma maneira direta para os usuários interagem com ele. O que eu fiz para contornar este problema é criar um aplicativo front-end separado que comunica com o serviço do Windows usando WCF. Desta forma, as definições de configuração 'editável pelo usuário' são persistentes como parte de configurações do aplicativo front-end, e não o serviço do Windows. As configurações são simplesmente comunicada ao serviço do Windows usando uma série de mensagens do WCF como o usuário muda-los.

No meu caso, eu mesmo adicionado um NotifyIcon ao meu aplicativo front-end e lógica adicionada para que o aplicativo pode ser removido da barra de tarefas quando ele é minimizado. Ele funciona da mesma forma Task Manager faz quando você ligar o 'Hide quando minimizado' opção. Isto dá ao usuário a ilusão de interagir com o serviço diretamente, embora seja dois processos completamente independentes.

EDIT:

Em resposta ao seu comentário, WCF é simplesmente uma API de mensagens. Mensagens são geralmente definidas como classes decoradas com os atributos DataContract e DataMember. Os atributos ServiceContract e OperationContract definir a interface de serviço WCF. Uma vez que estes são definidos, criando e que hospeda o serviço WCF dentro de seu serviço do Windows é fácil. E se você tiver Visual Studio 2008, criar o proxy do lado do cliente é uma pressão como VS2008 pode automatizar isso para você.

Uma vez que tudo isso é feito, o aplicativo front-end simplesmente instancia uma instância do proxy do lado do cliente e chama os métodos em que proxy. Como cada método é invocado, o quadro WCF cuida de serialização e enviar a mensagem para o serviço WCF para que ele agir. Em seguida, serializa qualquer resposta, incluindo exceções, de volta para o proxy. Do ponto de vista de lado do cliente, por exemplo, o aplicativo front-end, você simplesmente invocar uma função. Essa é a beleza da WCF! É muito análogo ao soquete de programação, exceto que você não tem que gerenciar as conexões. WCF cuida de tudo o que o encanamento para você.

Claro, tudo isso pressupõe que você pode pelo menos uso .NET 3.0. Se você estiver usando o Visual Studio 2008, você está em boa forma. Aqui estão um par de tutoriais para ajudar você a começar:

Depois de ter os conceitos básicos para baixo, eu recomendaria olhando de Juval Lowy website . Há uma grande quantidade de downloads gratuitos WCF-relacionados Não que eu acho muito útil para olhar, embora seja um pouco mais avançado. Compreender os conceitos WCF antes de se aprofundar muito longe lá.

Mais uma vez, todo o ponto deste é ajudar os usuários a configurar vários aspectos do seu serviço do Windows. Se você não fornecer uma interface gráfica front-end para fazer isso, eu não tenho certeza de como eles fariam isso curto de manipular manualmente o arquivo app em si.

Espero que isso ajude.

Outras dicas

Se você só precisa de um único dicionário de nome / valor para armazenar os parâmetros de configuração, em seguida, o app é a resposta mais simples. Em sua solução é chamado de "app", mas quando ele é construído ele é renomeado para ser o nome do "config" executável +.

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