dotNed

Welkom bij dotNed Inloggen | Aanmelden | Help
in Zoeken

Dennis' avonturen in .net

Configuration files en WCF

De manier van .net om met configuratie om te gaan is gewoonweg fantastisch. Ik kom nog uit de tijd dat .ini files erg geavanceerd waren, dus de app.config is een enorme stap vooruit.

Nadeel is wel dat de config files groot worden. Erg groot... Nu zijn er gelukkig voor de verschillende frameworks mooie tools die je helpen bij het configureren. Ik noem even de ASP.Net config, de entlib configurator en natuurlijk de WCF configurator. Allemaal handig.

Echter, ik ben gek op code. Ik wil zien wat er gebeurt in mijn .config bestanden. Dus duik ik regelmatig in mijn config om te zien wat de tool nu precies uitspookt.

Als je nou, net als ik, een hekel heb aan 1 groot config bestand waar alles in zit, is het handig om je config op te splitsen. Bijvoorbeeld:

<?xml version="1.0"?>
<configuration>
    <appSettings configSource="myAppSettings.config"/>
    <connectionStrings configSource="myConnectionStrings.config"/>
    <system.web>
        <compilation debug="true" />
        <authentication mode="Windows" />
    </system.web>
</configuration>

 

Op die manier kun je dus je specifieke configs in een eigen file zetten. De myAppSettings.config ziet er als volgt uit:

<?xml version="1.0"?>
<appSettings>
  <add key="someKey" value="someValue"/>
  <add key="anotherKey" value="anotherValue"/>
  <add key="yetAnotherKey" value="yetAnotherValue"/>
</appSettings>

En voor de volledigheid, de myConnectionStrings.config:

<?xml version="1.0"?>
<connectionStrings>
  <add name="myDatabase" connectionString="server=.\SQLExpress;database=db;Integrated Security=SSPI"/>
</connectionStrings>

 Heel mooi. En dat wil ik dus ook met mijn <system.serviceModel> doen, waar mijn WCF configuratie in staat.

Waarom? Ik heb een classlibrary gemaakt met daarin alle gegeneerde WCF client code, plus een aantal wrapper classes die de business rules bewaken. Ik wil die classlibrary uitleveren aan diegene die de front end applicaties bouwen, en de configuratie moet er uiteraard bij zitten. Als ik die niet loskoppel, dan moeten ze de config in hun eigen app.config zetten. Niet zo'n probleem, maar ik vind dat dat bij de classlibrary hoort.

Maar wat schetst mijn verbazing? Dat kan dus helemaal niet! de <system.servicemodel> tag heeft geen, ik herhaal geen configSource attribuut!

Kan iemand mij uitleggen waarom niet???

Published Wednesday, June 06, 2007 12:16 PM door dvroegop
Filed Under:

Comments

 

Peter said:

Het probleem is dat de <system.servicemodel> een System.Configuration.ConfigurationSectionGroup is (zoals <system.web> dat ook is en dus dat attribuut ook niet heeft) .

Deze SectionGroup(s)  hebben geen SectionInformation zoals een ConfigurationSection dat wel heeft, daar vind je het configSource attribute.
Dus stiekem hebben de sections binnen de sectiongroup <system.servicemodel> deze optie wel, alleen hij zit niet in de XSD voor intellisense...
Dus dit werkt wel:
   <system.serviceModel >
       <bindings configSource="bindings.config">
       </bindings>
   </system.serviceModel>

Toch wel jammer dat ConfigurationSectionGroup deze optie niet hebben, dus ook je eigen sectiongroups niet :(
Peter
June 8, 2007 3:14 PM
 

dvroegop said:

Thanks!
Mijn config ziet er nu veel beter uit. En belangrijker nog: de subconfig bestanden zitten nu bij mijn classlibrary en worden bij de build meegekopieerd. Dus de app.config van de client gebruikt nu iedere keer de juiste configs.

Heerlijk :)
June 11, 2007 1:42 PM
Anonymous comments are disabled

About dvroegop

Programmeert al sinds 1982. Microsoft Surface MVP.
Powered by Community Server, by Telligent Systems