Domanda

È possibile utilizzare directory virtuali e / o applicazioni virtuali per configurare due siti Web che condividono lo stesso codice applicazione (pagine aspx ecc.) ma che hanno file web.config diversi? I siti e il codice risiedono sullo stesso server in esecuzione sullo stesso IIS.

Sto usando IIS 6.

È stato utile?

Soluzione

La risposta breve è no se si desidera mantenere il codice in un unico posto. Probabilmente la soluzione migliore è fare in modo che l'applicazione carichi un file di configurazione personalizzato in base a ciò che ritieni sia il sito (presumibilmente host header?).

Qualcosa come ConfigurationManager.OpenExeConfiguration può essere utile.

Immagino che un'alternativa sia inventare una convenzione di configurazione in cui hai tutto in un unico file e usi GetSection (con qualche tipo di prefisso specifico per l'app) per ottenere le impostazioni specifiche per ciò che desideri.

Altri suggerimenti

Questo semplicemente non è possibile.

Perché ???

Poiché il processo di lavoro asp.net leggerà il file di configurazione predefinito dalla cartella fisica in cui l'applicazione risiede fisicamente. Le directory virtuali non hanno nulla a che fare con web.config. Viene utilizzato solo dal server Web (IIS) per mappare una directory fisica particolare come root del sito Web.

Grazie.

Sono abbastanza sicuro di averlo fatto una volta fa per avere una stringa di connessione db diversa per ogni istanza di un sito web. La mia ipotesi era che esistesse una directory virtuale per ogni istanza del sito Web che solo conteneva un web.config con impostazioni specifiche dell'istanza e quindi all'interno di ciascuna di queste directory virtuali c'era un'app che faceva riferimento al codice sorgente (che includeva un web.config condiviso).

Quindi il trucco, se ricordo bene, era, per un dato sito Web, avere una directory virtuale che contenesse solo un web.config. I valori in questo verrebbero ereditati dalla sotto-app di quella directory virtuale.

dovrebbe essere, verrà utilizzato web.config nell'applicazione virtuale. Se il layout è gerarchico, potrebbe essere necessario cercare l'ereditarietà web.config

Suppongo che tu abbia l'applicazione A, l'applicazione B, l'applicazione C e così via, tutte esattamente uguali, tranne che differiscono per alcune proprietà di configurazione definite nei loro file web.config.

Naturalmente questo è possibile - il modo più semplice è impostare il progetto come applicazione web, quindi compilare, quindi condividere quella dll tra le applicazioni. Puoi utilizzare il GAC come desideri.

È possibile impostare singoli siti in IIS che puntano a una directory condivisa (o utilizzare una directory virtuale in ciascuna) in cui si trova tutta la logica, ma non è possibile condividere la cartella app_code.

Modifica

RichardOD ha la migliore risposta sopra e ho implementato qualcosa di simile prima. Fondamentalmente, ho impostato un file di configurazione personalizzato che fa riferimento a web.config (per impedire il riavvio dell'app quando apporto delle modifiche). Questo file viene letto dal nome host e contiene proprietà specifiche su base per host.

Tutto quello che faccio è aggiungere intestazioni host a IIS e una voce per quell'host nel file di configurazione personalizzato. Fatto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top