none
Share AppSettings configuration between a service Web and an asp.net web application RRS feed

  • Question

  • Hi there,
    In a web service (A), I would like to read and modify a web site (B) configuration  file. My goal is only to modify the appSettings section.
     
    In order to avoid mistakes, I would like not to  have these settings in the default web.config file but, say, in a "settings.config" file, located in the webservice virtual directory.
     
    On IIS6, my webservice A is a web application from the B web site. So, the A source files are in a (virtual) subdirectory of the B source files directory.
     
    Does it seem possible ?
    ___________________________________________________________________________________________________
    Now, for a start, I've tried to read the settings in the web.config file of A:
     
    <?xml version="1.0"?>
    <Configuration>
      <...>
      <appSettings>
            <add key="a" value="aaa"/>
        </appSettings>
        <connectionStrings>
            <clear/>
            <add name="Stibil" connectionString="Server=.\sql2008..."/>
        </connectionStrings>
     
    I use this code:
     
            System.Configuration.Configuration rootWebConfig1 =
         WebConfigurationManager.OpenWebConfiguration(null);
                if (rootWebConfig1.AppSettings.Settings.Count > 0) 
                {
                    KeyValueConfigurationElement customSetting = rootWebConfig1.AppSettings.Settings[param];
                    if (customSetting != null)
                        return customSetting.Value;
                }
                return "Nothing";
     
    And the fact is that "rootWebConfig1.AppSettings.Settings.Count"  returns 0...
    However, "rootWebConfig1.AppSettings.ConnectionStrings..ConnectionStrings.ConnectionStrings.Count" is 1.
     
    I can't see where is my mistake...
     
    __________________________________________________________________________________________________
    Now if I want to read a config file (in my web service or in my web site), which is not the default "web.config" file, possibly located in a virtual subdirectory, what parameter do I need in the "OpenWebConfiguration" method ?
     
    Best regards
    vendredi 27 mars 2009 17:20

Réponses

  • Bonjour

    1) Pour lire une valeur AppSetting, je fais personnellement
    désolé, c'est du VB ! :-) et dans mon exemple de code, cela marche.

    Dim valeur As String = System.Web.Configuration.WebConfigurationManager.AppSettings(key)

    2) pour écrire/modifier une valeur, voici ce que je fais (toujours en VB)

    Dim path As String = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath
    Dim myConfiguration As Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(path)
    If myConfiguration.AppSettings.Settings.Item(key) Is Nothing Then
        myConfiguration.AppSettings.Settings.Add(key, valeur)
    Else
        myConfiguration.AppSettings.Settings.Item(key).Value = valeur
    End If
    myConfiguration.Save()

    Ci-dessous, key et valeur sont bien entendu 2 strings

    J'espère que cela peux vous aider.
    Thierry

    • Marqué comme réponse PhilTheGap lundi 6 avril 2009 07:52
    vendredi 3 avril 2009 13:58

Toutes les réponses

  • >>> I would like not to  have these settings in the default web.config file but, say,
    >>>in a "settings.config" file, located in the webservice virtual directory.

    To use a extra file to store appSettings keys & values, youhave to specify the file name (e.g. settings.config) in the tag <appSetting> in using the property 'file' or 'configsource' (I don't remember exactly which one is the correct one).
    See below sample

    <appSettings file="settings.config" />

     

    <appSettings configSource="settings.config"/>

    I am not sure if that answer completly your questions, but I hope it can help a little bit.
    Regards
    Thierry

    mercredi 1 avril 2009 14:37
  • Bonjour Thierry et merci de ta réponse,

    Bon au départ, je pensais être sur un forum anglophone... Donc j'ai bêtement écris en anglais.

    J'ai en fait 3 questions:

    1> si j'insère dans le web.config de mon service Web la section:

    <

     

    appSettings><add key="NbMaxBaseLNS" value="4"/></appSettings>

    et que j'applique le code (que j'ai déjà mentionné) je n'obtiens rien, alors que pourtant le code me donne la chaine de connexion. J'aimerais donc trouver pourquoi...

    2> Peut-on avoir les settings dans un fichier séparé ? Ta réponse indique que oui...

    3> j'ai un site Web IIS6 qui contient le service Web en tant qu'application. Puis-je depuis le code Asp.Net de ce site lire et modifier les paramètres qui sont dans la section <appSettings> du web.config de ce service ? Normalement oui car le répertoire (virtuel) du service Web est un sous-répertoire du répertoire (virtuel) du site.

    Merci d'avance
    jeudi 2 avril 2009 08:29
  • Bonjour

    1) Pour lire une valeur AppSetting, je fais personnellement
    désolé, c'est du VB ! :-) et dans mon exemple de code, cela marche.

    Dim valeur As String = System.Web.Configuration.WebConfigurationManager.AppSettings(key)

    2) pour écrire/modifier une valeur, voici ce que je fais (toujours en VB)

    Dim path As String = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath
    Dim myConfiguration As Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(path)
    If myConfiguration.AppSettings.Settings.Item(key) Is Nothing Then
        myConfiguration.AppSettings.Settings.Add(key, valeur)
    Else
        myConfiguration.AppSettings.Settings.Item(key).Value = valeur
    End If
    myConfiguration.Save()

    Ci-dessous, key et valeur sont bien entendu 2 strings

    J'espère que cela peux vous aider.
    Thierry

    • Marqué comme réponse PhilTheGap lundi 6 avril 2009 07:52
    vendredi 3 avril 2009 13:58