Estoy creando un servicio de windows .Net 4.0 y probar algunas de las funciones de dicho servicio con un cliente de windows forms haciendo referencia al proyecto de servicio.

El proyecto de servicio tiene una Aplicación.config archivo y ese archivo se parece a esto:

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
     <connectionStrings>
       <clear />
       <add name="myLocalMySQLDBUsername" connectionString="username"/>
     </connectionStrings>
  </configuration>

Cuando una función perteneciente a las llamadas de servicio:

  • ConfigurationManager.ConnectionStrings(«myLocalMySQLDBUsername»).ConnectionString

una referencia nula de error se produce porque mi cadena de conexión no está cargado. La única connectionStrings que se cargan son de la máquina.archivo de configuración ubicado en c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

Si puedo crear un ámbito de la aplicación de configuración para el servicio, puedo conseguir que el entorno mediante el uso de la Mi.Los ajustes.configuración -> así que no es como el de la Aplicación.archivo de configuración no está siendo leído.

Mi pregunta es: ¿por qué mi connectionStrings que no se cargan desde la Aplicación.archivo de configuración?

Gracias por su ayuda.

ACTUALIZACIÓN:

También, en este punto, incluso un trabajo de todo se agradece; la única razón para usar la aplicación.config es ser capaz de cifrar el contenido utilizando el DpapiProtectedConfigurationProvider (el contenido tendrá algún nombre de usuario/contraseña de los valores de servicio y conexiones de base de datos).

Traté de crear una sección AppSettings manualmente en el app.configuración, pero los ajustes no fueron leídos por el configurationManager (count = 0).

ACTUALIZACIÓN 2:

Por una sugerencia, he intentado abrir manualmente la aplicación.archivo de configuración así:

Dim exePath As String = System.IO.Path.Combine(Environment.CurrentDirectory, "ServiceName.exe")

Dim myConfig As Configuration = ConfigurationManager.OpenExeConfiguration(exePath)

Así que aquí es lo más raro, cuando me miro en el interior, la ruta de acceso es correcta (puntos a mi aplicación.config) pero la connectionStrings todavía se están cargados de la máquina.archivo de configuración (mi connectionStrings no están cargados)!! ARGH

ACTUALIZACIÓN 3:

Bien, así que, me lo imaginé. Cuando se hace referencia a un proyecto(de los padres) de otro proyecto(el niño), el hijo de la aplicación.config se utiliza, incluso si los padres de las clases están siendo utilizados. Por lo tanto, puedo conseguir los connectionStrings para mostrar si puedo copiar a la del niño de la aplicación.config. Al intentar abrirlo manualmente, mi currentDirectory fue de el hijo, no el padre (extraño cómo no lanzar una excepción – no habría sido capaz de encontrar el archivo de configuración … solo en silencio se utiliza la máquina.config … oh bien).

Gracias a todos por la ayuda!

Puede ser una pregunta tonta, pero ¿cómo se puede implementar el servicio y su aplicación.config? ¿Tienes un servicename.exe.config en el directorio correcto?
No he implementado pero … todo está todavía en la depuración en mi máquina local. Cuando me instale, voy a estar seguro de que el archivo de configuración termina en la carpeta System32 (creo) o cualquier carpeta que los servicios de windows para buscar archivos de forma predeterminada.
evitar publicado.

OriginalEl autor Dima | 2011-04-10

4 Comentarios

  1. 5

    La primera cosa que usted querrá hacer es asegurarse de que la cuenta de servicio tiene acceso al archivo (si no se ejecuta como SYSTEM). Suena a que se debe aceptar, sin embargo desde que mencionar a Mi.Los ajustes.Configuración funciona.

    La otra cosa a tener en cuenta es asegurarse de que la aplicación.config tiene el nombre del ejecutable del servicio en ella – así que si el servicio exe es MyService.exe el app.config debe ser nombrado MyService.exe.config.

    La última cosa que tomar nota de: bibliotecas van a leer desde el archivo ejecutable de la aplicación.config que carga la biblioteca, no la aplicación.config que es con la biblioteca. Así que si usted tiene un proyecto para el archivo ejecutable del servicio MyService y un proyecto para la biblioteca MyServiceLibrary el código de la biblioteca de la lectura de la aplicación.config de MyService no MyServiceLibrary.

    Sí a todas las cuentas. Nombre correctamente (me refiero, es auto denominado cuando se compila y he comprobado que el nombre es correcto en la carpeta debug). Pensé que de la Aplicación.config sería utilizado y llegó a la misma conclusión que usted indica – es decir, la aplicación de servicio.config es el que se utiliza. Todavía estoy golpeando mi cabeza contra la pared en cuanto a por qué mi connectionStrings no se leer … suspiro
    Supongo que no entendí tu comentario/respuesta en un principio, pero que estaban en lo correcto. Gracias.
    Este fue el más cercano a la respuesta real pero te comento en mi pregunta, para hacerla más clara (creo, espero).

    OriginalEl autor Joshua

  2. 2

    Vi a algunas personas dicen que este problema puede ser corregido manualmente volver a agregar una referencia a System.Configuration.dll

    LADO NOTA: Si que realmente es usted toda la aplicación.archivo de configuración y no sólo un fragmento, a continuación, ese es su problema… eres de la aplicación.archivo de configuración debería ser MUCHO más complicado .NETO no será capaz de cargar.

    TRABAJO en TORNO a: Utilizar el administrador de configuración para abrir este archivo de configuración (hay una API para que.) Usted no puede llegar a cargar auto-mágicamente acaba de decirle al administrador de configuración para abrirlo.

    Todavía creo que el problema es el archivo de configuración no es válido, podría usted por favor enviar el archivo COMPLETO?

    ¿A qué te refieres? Todo lo que está en el archivo de configuración es lo que me han pegado en la pregunta. En realidad, me alegro de que usted ha mencionado este como yo no soy del ajuste de la providerName para la cadena de conexión … este es un valor necesario? Si es así, ¿qué me puse a?
    msdn.microsoft.com/en-us/library/ms254500.aspx
    nm acerca de la respuesta anterior-tratar el comentario anterior.
    Gracias por el enlace; parece que no necesito una providerName.
    Este es el completo archivo de configuración ahora para propósitos de prueba … realmente, no hay nada en ella … lo que ves es lo que está en mi archivo de configuración. Ahora, en la medida de como abrir el archivo de forma manual, lo he editado mi pregunta de incluir los detalles de que … gracias … por favor, consulte más arriba para más detalles.

    OriginalEl autor Hogan

  3. 0

    Asegúrese de que el archivo de configuración se implementa en la misma carpeta que el archivo ejecutable, y que se llama su.de la asamblea.exe.config.

    Es … y como ya he mencionado, si puedo crear un valor, ese valor se recupera sin problemas.
    configuración de usuario no son almacenados en la aplicación.config
    La configuración de la aplicación, lo siento si no les ha quedado claro.

    OriginalEl autor Diego Mijelshon

  4. 0

    He tenido un problema similar, pero en mi caso era porque me había cambiado el proyecto del espacio de nombres. También se utiliza como la sección configuración de la aplicación nombre del elemento en el archivo de configuración, por lo que el código no era encontrar el nuevo nombre de la sección. Jugueteando con uno de la configuración personalizada de los valores en las propiedades del proyecto y la reconstrucción causado la nueva sección escrita en la aplicación.config junto a los antiguos que fue lo que indicó el asunto para mí.

    OriginalEl autor robaker

Dejar respuesta

Please enter your comment!
Please enter your name here