2011-01-21 19 views
15

Mi chiedo come ottenere le impostazioni di associazione IIS del sito corrente (nome host, porta, indirizzo IP) in fase di esecuzione utilizzando ASP.NET. .NET fornisce un modo per ottenere queste informazioni?Ottieni binding IIS in fase di esecuzione

Modifica: Ho bisogno di un modo per ottenere le porte http e https configurate per il reindirizzamento alla porta destra quando si passa da http a https e viceversa da https a http se vengono utilizzate altre porte 80/443. C'è un modo per farlo senza privilegi estesi?

saluti

+0

Quale versione di IIS è in esecuzione? – RQDQ

+0

Bene, questo deve funzionare su IIS 6, 7 e 7.5 – Jay

risposta

12

L'unico modo per ottenere che (senza essere un amministratore) sta usando Microsoft.Web.Administration. Ho appena scritto un rapido blog su come farlo, vedi:
http://blogs.msdn.com/b/carlosag/archive/2011/01/21/get-iis-bindings-at-runtime-without-being-an-administrator.aspx

Fondamentalmente poiché IIS ha una caratteristica che chiamiamo Worker isolamento del processo è possibile leggere la configurazione da un'applicazione per sé, senza la necessità di essere amministratore. Se si utilizza ADSI, Metabase o qualsiasi altro modo, sarà necessario essere un amministratore.

+2

Grazie per questo. Basta una breve nota che il Microsoft.Web.Administration.dll richiesto è in C: \ Windows \ System32 \ inetsrv sul server. Anche l'argomento HttpContext non è richiesto, quindi può essere caricato all'avvio dell'applicazione. – Derrick

+0

@carlosag Ho usato 'Microsoft.Web.Administration' per leggere la configurazione senza privilegi di amministratore; hai bisogno dei privilegi di amministratore per * scrivere * nella configurazione? Non riesco a trovare alcuna documentazione su questo. –

3

si dovrebbe essere in grado di compiere questo accedendo al metabase di IIS, utilizzando i System.DirectoryServices assemblaggio.

Ad esempio, qui è possibile enumerare attraverso tutti i siti e le configurazioni di proprietà contenute in tali siti.

aggiungere questo riferimento al progetto:

using System.DirectoryServices

// Assuming your Server Id is 1, and you are connecting to your local IIS. 
DirectoryEntry de = new DirectoryEntry(@"IIS://localhost/W3SVC/1/Root"); 
foreach (DirectoryEntry entry in de.Children) 
{ 
    foreach (PropertyValueCollection property in entry.Properties) 
    { 
     Console.WriteLine("Name: {0}, Value {1}",property.PropertyName, property.Value); 
    } 
} 
Problemi correlati