Получить привязки IIS во время выполнения

Интересно, как получить параметры привязки IIS текущего сайта (имя хоста, порт, IP-адрес) во время выполнения с помощью ASP.NET. Предоставляет ли .NET какой-либо способ получить эту информацию?

Изменить: мне нужен способ настроить порты http и https для перенаправления на правильный порт при переключении с http на https и обратно с https на http, если используются другие порты, а затем 80/443. Есть ли способ сделать это без расширенных привилегий?

С Уважением


person Jay    schedule 21.01.2011    source источник
comment
Какую версию IIS вы используете?   -  person RQDQ    schedule 21.01.2011
comment
Что ж, это должно работать на IIS 6, 7 и 7.5.   -  person Jay    schedule 22.01.2011


Ответы (4)


Единственный способ добиться этого (не будучи администратором) — использовать Microsoft.Web.Administration. Я только что написал краткий блог о том, как это сделать, см.:
person Carlos Aguilar Mares    schedule 22.01.2011


Это можно сделать, обратившись к метабазе IIS с помощью сборки System.DirectoryServices.

Например, здесь вы можете перечислить все свои сайты и конфигурации свойств, содержащиеся на этих сайтах.

Добавьте эту ссылку в свой проект:

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);
   }
}
person George Johnston    schedule 21.01.2011

Я думаю, вы ищете доступ к метабазе:

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/43a51d34-7c81-413b-9727-ec9a19d0b428.mspx?mfr=true

person RQDQ    schedule 21.01.2011

Вы можете использовать следующий код для получения привязок:

public static IEnumerable<Binding> GetSiteBindings(Site site)
{
    BindingCollection bindings = site.Bindings;
    if (bindings != null)
    {
        foreach (Binding binding in bindings)
        {
            if (binding != null)
            {
                yield return binding;
            }
        }
    }

    yield return null;
}

Следующий код можно использовать для проверки вышеуказанного метода:

ServerManager mgr = new ServerManager();
foreach (Site s in mgr.Sites)
{
    Response.Write("Site: " + s);
    Response.Write("<br/>");

    var siteBindings = GetSiteBindings(s);
    if (siteBindings != null)
    {
        foreach (var binding in siteBindings)
        {
            if (binding != null)
            {
                var bindingInformation = binding.BindingInformation;
                var host = binding.Host;
                var endPoint = binding.EndPoint;

                Response.Write("Host: " + host + ", BindingInfo: " + bindingInformation + ", EndPoint: " + endPoint);
                Response.Write("<br/>");
            }
        }
    }

    Response.Write("----------------------------------");
    Response.Write("<br/>");
}

Используемые пространства имен:

<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="Microsoft.Web.Administration" %>

Упомянутая сборка: Microsoft.Web.Administration

введите здесь описание изображения

Поместите приведенный выше код в Sample.aspx для его проверки:

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="Microsoft.Web.Administration" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        ServerManager mgr = new ServerManager();
        foreach (Site s in mgr.Sites)
        {
            Response.Write("Site: " + s);
            Response.Write("<br/>");

            var siteBindings = GetSiteBindings(s);
            if (siteBindings != null)
            {
                foreach (var binding in siteBindings)
                {
                    if (binding != null)
                    {
                        var bindingInformation = binding.BindingInformation;
                        var host = binding.Host;
                        var endPoint = binding.EndPoint;

                        Response.Write("Host: " + host + ", BindingInfo: " + bindingInformation + ", EndPoint: " + endPoint);
                        Response.Write("<br/>");
                    }
                }
            }

            Response.Write("----------------------------------");
            Response.Write("<br/>");
        }
    }

    public static IEnumerable<Binding> GetSiteBindings(Site site)
    {
        BindingCollection bindings = site.Bindings;
        if (bindings != null)
        {
            foreach (Binding binding in bindings)
            {
                if (binding != null)
                {
                    yield return binding;
                }
            }
        }

        yield return null;
    }



</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="HtmlForm" runat="server">
        <div>
        </div>
    </form>
</body>
</html>

Выдаст вам вывод следующим образом:

введите здесь описание изображения

person Raghav    schedule 04.09.2018