2010-03-09 16 views
18

Devo duplicare alcune impostazioni (come la stringa di connessione) tra un file web.config utilizzato da un host WCF e un file web.config utilizzato da un client web.Un web.config può leggere da un file xml esterno?

Nell'interesse di non duplicare, posso leggere entrambi i file web.conf da un file xml separato? I due web.configs possono essere interamente in diverse soluzioni/progetti, quindi credo che questo non è possibile, ma volevo ottenere l'opinione di altri.

PS: Capisco che posso utilizzare un database per memorizzare tutte le impostazioni di configurazione.

risposta

19

Sì, qualsiasi configurazione sezione può essere "esternalizzato" - questo include cose come <appSettings>, <connectionStrings> e molti altri.

Avresti qualcosa di simile nel tuo web.config:

<configuration> 
    <appSettings configSource="appSettings.config" /> 
    <connectionStrings configSource="connectionStrings.config" /> 
    <system.web>  
     <pages configSource="pages.config" /> 
     <httpHandlers configSource="httphandlers.config"> 
    </system.web>  
</configuration> 

I esternalizzati di configurazione di sarebbe solo contenere che una sottosezione in loro:

httphandlers.config:

<httpHandlers> 
    <remove verb="*" path="*.asmx"/> 
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> 
</httpHandlers> 

Nota: non è possibile esternalizzare l'intera parte <system.web>, poiché si tratta di una sezione di configurazione - non una sezione di configurazione - ma è possibile esternalizzare la maggior parte delle sottosezioni contenute in system.web.

+0

Dove dovrebbe essere localizzato httphandlers.config? È possibile che i progetti che condividono questo file di configurazione si trovino su un dominio – DotnetDude

+0

@DotnetDude: se non si specifica un percorso, httpHandlers.config dovrebbe trovarsi nella stessa posizione di web.config. È possibile specificare sottotraccia, ad es. configSource = "config \ httpHandlers.config" per mettere tutti i tuoi file di configurazione in un unico posto.Per condividere tra più progetti, copiare in una diversa posizione del progetto o fare cose come collegamenti simbolici a livello di sistema operativo per far apparire un file fisico in varie posizioni di directory –

1

se possibile, basta mettere le configurazioni in comune in Machine.Config. Entrambi possono leggere da lì e ogni web.config può sovrascrivere qualsiasi valore necessario.

Dico, se potete, perché so che molte società di hosting non vi permetteranno di modificarlo a meno che non stiate noleggiando un server dedicato.

11

Un file di configurazione può puntare ad altri file di configurazione fintanto che i file si trovano nello stesso percorso (comprese le sottodirectory).

Ecco un esempio delle mie impostazioni di configurazione:

<connectionStrings configSource="web\config\connectionStrings.config" /> 
<appSettings configSource="web\config\appSettings.config" /> 
<system.diagnostics configSource="web\config\diagnostics.config" /> 
<system.serviceModel> 
    <bindings configSource="web\config\serviceModelBindings.config" /> 
    <behaviors configSource="web\config\serviceModelBehaviors.config" /> 
    <services configSource="web\config\serviceModelServices.config" /> 
    <client configSource="web\config\serviceModelClient.config" /> 
</system.serviceModel> 

Nel mio caso, ho diverse applicazioni Windows in una cartella principale che comprendono un'applicazione web come una sottocartella. Ciò consente al file di configurazione di ogni applicazione di puntare alle configurazioni condivise.

+0

** runtime ** e ** system.web.extensions * * _sections_ non funziona con *** configSource ***? – Kiquenet