2009-06-16 3 views
5

E 'possibile utilizzare le directory virtuali e/o le applicazioni virtuali per configurare due siti Web che condividono lo stesso codice dell'applicazione (pagine aspx ecc.) Ma hanno un Web diverso File .config? I siti e il codice risiedono nello stesso server in esecuzione sullo stesso IIS.Due siti ASP.NET che condividono i file dell'applicazione ma con web.config differente

Sto usando IIS 6.

+1

Qual è la differenza tra i due file .config? Forse solo in relazione all'autenticazione e all'autorizzazione? Di solito è possibile trovare altri modi per gestire problemi come questi (come la condivisione tra il sito Internet e il sito Intranet che lo gestisce). –

+0

L'unica differenza è qualche appSettings. Ero solo curioso di sapere se potevo fare questo senza modificare alcun codice. –

+0

@ Jakob- Potresti farlo con le impostazioni dell'app prefiggendo un qualche tipo di chiave specifica dell'app, ma ciò richiederebbe comunque una modifica del codice. – RichardOD

risposta

5

La risposta breve è no se si desidera mantenere il codice in un unico punto. Probabilmente la soluzione migliore è avere un'applicazione che carica un file di configurazione personalizzato in base a ciò che determina il sito (presumibilmente l'intestazione host?).

Qualcosa come ConfigurationManager.OpenExeConfiguration può essere utile.

Immagino che un'alternativa sia quella di creare una convenzione di configurazione in cui si ha tutto in un unico file e utilizzare GetSection (con qualche tipo di prefisso specifico dell'app) per ottenere le impostazioni specifiche per quello che si desidera.

+0

Sì, so che questo può essere fatto in altri modi. Speravo solo di poterlo fare senza modificare il codice esistente. –

+0

La risposta breve è "sì", non utilizzando però le directory virtuali, ma i collegamenti hardware NTFS: https://stackoverflow.com/questions/45889661/several-asp-net-sites-that-are-sharing-application-files -but-using-different-th –

0

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

+0

Dovrei aggiungere, avresti bisogno di 2 copie fisiche del codice dell'applicazione come un web.config sarebbe necessario in ogni – Pharabus

1

Questo semplicemente non è possibile.

Perché ???

Becco il processo di lavoro asp.net leggerà il file di configurazione predefinito dalla cartella fisica in cui risiede fisicamente l'applicazione. Le directory virtuali non hanno nulla a che fare con web.config. È usato da webserver (IIS) per mappare una particolare directory fisica come root del sito.

Grazie.

+1

-1 per 'Le directory virtuali non hanno nulla a che fare con web.config.' Vedi qui ... http://msdn.microsoft.com/en-us/library/ms178685(v=vs.100).aspx#configuration_inheritance, "Quando il server riceve una richiesta per una particolare risorsa Web, ASP.NET calcola le impostazioni di configurazione per quella risorsa in modo gerarchico, utilizzando tutti i file di configurazione che si trovano nel percorso della directory virtuale per l'URL richiesto. ' –

0

Suppongo che tu abbia l'applicazione A, l'applicazione B, l'applicazione C e così via, che siano tutti 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 usare il GAC se lo desideri.

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

EDIT

RichardOD ha la migliore risposta di cui sopra, e mi hanno messo in atto qualcosa di simile prima d'ora. Fondamentalmente, ho impostato un file di configurazione personalizzato che fa riferimento a web.config (per impedire il riavvio dell'app quando apporto le modifiche ad esso). Questo file viene letto dal nome host e contiene proprietà specifiche su base host.

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

1

Sono sicuro che l'ho fatto una volta anni fa per avere una stringa di connessione db diversa per ogni istanza di un sito web. La mia ipotesi è che c'era una directory virtuale per ogni istanza del sito che solo conteneva un web.config con un'istanza impostazioni specifiche e poi all'interno di ciascuna di queste directory virtuali era un app che fa riferimento il codice sorgente (che comprendeva un condiviso web.config).

Quindi il trucco, se non ricordo male, era, per un dato sito Web, avere una directory virtuale che conteneva solo un web.config. I valori in questo sarebbero ereditati dall'app secondaria di quella directory virtuale.

+0

Conferma che questo trucco funziona – Pashec

+0

Fresco. Hai notato quale web.config ha la precedenza? L'interno o l'esterno? Mi sembra di ricordare che sia l'esterno. –

Problemi correlati