2011-01-21 3 views
15

ASP.NET을 사용하여 런타임에 현재 사이트 (호스트 이름, 포트, IP 주소)의 IIS 바인딩 설정을 얻는 방법을 알고 싶습니다. .NET은 이러한 정보를 얻을 수있는 방법을 제공합니까?런타임시 IIS 바인딩 가져 오기

편집 http : // https로 전환 할 때 올바른 포트로 리디렉션되도록 구성된 http 및 https 포트를 얻는 방법이 필요합니다. 다른 포트가 80/443 인 경우 https에서 http로 돌아갑니다. 확장 된 권한없이이 작업을 수행 할 수있는 방법이 있습니까?

안부

+0

실행중인 IIS의 버전은 무엇입니까? – RQDQ

+0

음, IIS 6, 7 및 7.5에서 작동해야합니다. – Jay

답변

12

유일한 방법은 그것을 달성하기 위해 (관리자없이) Microsoft.Web.Administration을 사용하고 있습니다. 난 그냥 볼이 작업을 수행하는 방법에 대한 빠른 블로그를 썼다 :
http://blogs.msdn.com/b/carlosag/archive/2011/01/21/get-iis-bindings-at-runtime-without-being-an-administrator.aspx

IIS는 우리가 관리자 인의 필요없이 응용 프로그램 자체에서 구성을 읽을 수 있습니다 작업자 프로세스 격리 부르는 기능이 기본적으로 있기 때문이다. ADSI, 메타베이스 또는 다른 방법을 사용하는 경우 관리자 권한이 필요합니다.

+2

감사합니다. 필요한 Microsoft.Web.Administration.dll은 서버의 C : \ Windows \ System32 \ inetsrv에 있습니다. 또한 HttpContext 인수는 필요하지 않으므로 응용 프로그램 시작시로드 할 수 있습니다. – Derrick

+0

@carlosag 관리자 권한없이 config를 읽으려면'Microsoft.Web.Administration'을 사용했습니다. 구성에 * 쓰기 *하려면 관리자 권한이 필요합니까? 이것에 대한 문서를 찾을 수 없습니다. –

3

당신은 어셈블리 System.DirectoryServices를 사용하여 IIS 메타베이스에 액세스하여이 작업을 수행 할 수 있어야합니다.

예를 들어 여기에 포함 된 모든 사이트 및 속성 구성을 열거 할 수 있습니다.

프로젝트에이 참조를 추가

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); 
    } 
} 
관련 문제