¿Cuál sería la mejor manera de conservar la configuración editable por el usuario para un servicio de Windows?

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

Pregunta

Estoy desarrollando una aplicación que se implementará como un Servicio de Windows y me preguntaba cuál sería la mejor manera de lidiar con las diferentes configuraciones de ( a nivel de usuario y aplicación). La cuestión es que no estoy completamente familiarizado (todavía) con todas las opciones disponibles, así que en principio estoy favoreciendo la propia Configuración del sistema (ConfigurationManager.RefreshSection (" appSettings ") parece tentador), aunque todavía no puedo entender la imagen completa, es decir, dónde se almacena el archivo app.config para un servicio determinado, etc.

Entonces, mi pregunta para ustedes es: ¿cuál sería la mejor manera de almacenar los detalles de configuración editables por el usuario para un servicio de Windows determinado? Gracias de antemano a todos por los comentarios.

¿Fue útil?

Solución

Hmmm ... configuraciones de configuración 'editables por el usuario' para un servicio de Windows ...

Lo que hay que tener en cuenta es que el Servicio de Windows se ejecuta en segundo plano, por lo que no tiene una forma directa para que los usuarios interactúen con él. Lo que he hecho para solucionar esto es crear una aplicación de aplicaciones para el usuario que se comunique con el Servicio de Windows mediante WCF. De esta manera, los ajustes de configuración 'editables por el usuario' se mantienen como parte de los ajustes de la aplicación de front-end, no del Servicio de Windows. La configuración se comunica simplemente al Servicio de Windows mediante una serie de mensajes WCF a medida que el usuario los cambia.

En mi caso, incluso agregué un NotifyIcon a mi aplicación front-end y agregué lógica para que la aplicación se pueda eliminar de la barra de tareas cuando se minimiza. Funciona de la misma manera que lo hace el Administrador de tareas cuando activa la opción 'Ocultar cuando minimizado'. Esto le da al usuario la ilusión de interactuar con el servicio directamente, a pesar de que son dos procesos completamente independientes.

EDITAR:

En respuesta a su comentario, WCF es simplemente una API de mensajería. Los mensajes generalmente se definen como clases decoradas con los atributos DataContract y DataMember. Los atributos ServiceContract y OperationContract definen la interfaz de servicio WCF. Una vez que se han definido, es fácil crear y alojar el servicio WCF dentro de su servicio de Windows. Y si tiene Visual Studio 2008, crear el proxy del lado del cliente es muy sencillo, ya que VS2008 puede automatizarlo por usted.

Una vez hecho todo esto, su aplicación de front-end simplemente crea una instancia del proxy del lado del cliente e invoca los métodos en ese proxy. A medida que se invoca cada método, el marco de WCF se encarga de serializar y enviar el mensaje al servicio de WCF para que actúe. Luego serializa cualquier respuesta, incluidas las excepciones, de vuelta al proxy. Desde la perspectiva del lado del cliente, por ejemplo, su aplicación de front-end, simplemente ha invocado una función. Esa es la belleza de WCF! Es muy análogo a la programación de sockets, excepto que no tiene que administrar las conexiones. WCF se encarga de todas esas tuberías por usted.

Por supuesto, todo esto supone que al menos puede usar .NET 3.0. Si está utilizando Visual Studio 2008, está en buena forma. Aquí hay un par de tutoriales para ayudarlo a comenzar:

Una vez que tenga los conceptos básicos hacia abajo, recomendaría consultar el sitio web de Juval Lowy's. Hay muchas descargas gratuitas relacionadas con WCF que me parecen muy útiles, aunque es un poco más avanzado. Comprenda los conceptos de WCF primero antes de profundizar demasiado allí.

Una vez más, el objetivo de esto es ayudar a los usuarios a configurar diversos aspectos de su servicio de Windows. Si no proporciona una interfaz gráfica de usuario de front-end para hacer esto, no estoy seguro de cómo lo harían sin manipular manualmente el archivo app.config.

Espero que esto ayude.

Otros consejos

Si solo necesita un único diccionario de nombre / valor para almacenar sus parámetros de configuración, entonces app.config es la respuesta más simple. En su solución se llama " app.config " ;, pero cuando se construye se renombra para que sea el nombre del ejecutable + " .config " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top