2011-01-21 36 views
15

Tôi tự hỏi làm thế nào để có được các thiết lập ràng buộc IIS của trang hiện tại (tên máy chủ, cổng, địa chỉ IP) khi chạy bằng ASP.NET. .NET có cung cấp bất kỳ cách nào để có được những thông tin này không?Nhận các ràng buộc IIS tại thời gian chạy

Chỉnh sửa: Tôi cần cách để đặt các cổng http và https được định cấu hình để chuyển hướng đến đúng cổng khi chuyển từ http sang https và ngược lại từ https thành http nếu các cổng khác sau đó sử dụng 80/443. Có cách nào để làm điều này mà không có đặc quyền mở rộng?

Trân

+0

Bạn đang chạy phiên bản IIS nào? – RQDQ

+0

Vâng, điều này đã làm việc trên IIS 6, 7 và 7.5 – Jay

Trả lời

12

Cách duy nhất để đạt được điều đó (mà không bị một quản trị viên) được sử dụng Microsoft.Web.Administration. Tôi vừa viết một blog nhanh về cách thực hiện điều đó, xem:
http://blogs.msdn.com/b/carlosag/archive/2011/01/21/get-iis-bindings-at-runtime-without-being-an-administrator.aspx Về cơ bản vì IIS có một tính năng mà chúng tôi gọi là cách ly Công việc, có thể đọc cấu hình từ Ứng dụng mà không cần quản trị viên. Nếu bạn sử dụng ADSI, Metabase, hoặc bất kỳ cách nào khác, bạn sẽ yêu cầu phải là một quản trị viên.

+2

Cảm ơn cho điều này.Chỉ cần một lưu ý nhanh rằng yêu cầu Microsoft.Web.Administration.dll là trong C: \ Windows \ System32 \ inetsrv trên máy chủ. Ngoài ra đối số HttpContext là không cần thiết, do đó, điều này có thể được nạp khi khởi động ứng dụng. – Derrick

+0

@carlosag Tôi đã sử dụng 'Microsoft.Web.Administration' để đọc cấu hình không có đặc quyền quản trị viên; bạn có yêu cầu quyền quản trị để * ghi * vào cấu hình không? Tôi không thể tìm thấy bất kỳ tài liệu nào về điều này. –

3

Bạn sẽ có thể thực hiện điều này bằng cách truy cập IIS metabase, sử dụng System.DirectoryServices lắp ráp.

Ví dụ: tại đây bạn có thể liệt kê tất cả các trang web và cấu hình thuộc tính của bạn có trong các trang web đó.

Thêm thông tin này để dự án của bạn:

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); 
    } 
} 
Các vấn đề liên quan