Найти физический путь от Microsoft.Web.Administration и путь относительно его корня - PullRequest
5 голосов
/ 02 декабря 2010

Я хочу найти физический путь на веб-сайте IIS, путь относительно корня веб-сайта, используя сборку Microsoft.Web.Administration .NET.

Кажется, нет единственного способа сделать это, но мне интересно, является ли следующая процедура лучшим способом?:

  1. Получите Microsoft.Web.Administration.Объект сайта
  2. Найти приложение с самым длинным путем, совпадающим с началом пути относительно корня
  3. Обрезать путь приложения от начала пути относительно корня, указав путьотносительно приложения
  4. Найдите виртуальный каталог в этом приложении с самым длинным путем, который соответствует началу пути относительно приложения
  5. Удалите путь приложения от начала пути относительноприложение, задающее путь относительно виртуального каталога
  6. Добавьте путь относительно виртуального каталога (swapping / for) к физическому пути виртуального каталога, чтобы указать физический путь, который нам нужен

Ли

Ответы [ 3 ]

8 голосов
/ 24 апреля 2013

Я нашел следующий код, чтобы получить путь

ServerManager sm = new ServerManager();
sm.Sites["Default Web Site"].Applications["/"].VirtualDirectories["/"].PhysicalPath;

http://forums.iis.net/t/1146686.aspx/1

3 голосов
/ 03 декабря 2010

Вы абсолютно правы, это правильный алгоритм. Итак, перефразируя, убедитесь, что:
1) Найдите сайт, которому он соответствует (если вы делаете это на основе имени хоста или привязки (ip, port и т. Д.)).
2) Найдите приложение на сайте, которое соответствует самому длинному подмножеству оставшегося URL.
3) Найдите VirtualDirectory в приложении, которое соответствует самому длинному подмножеству оставшегося URL.
4) Сделайте Path.Combine (vdir.PhysicalPath, «оставшийся URL-адрес с / заменен на \»)

Это физический путь. Помните, что в настоящее время многие URL-адреса могут быть логичными (в сценариях, таких как MVC или перезапись), поэтому у вас может не быть реального физического пути.

1 голос
/ 09 июля 2015

Чтобы отобразить все виртуальные и физические пути с сервера:

Dim stringIIS As String = String.Empty
Dim serverName As String = "MACHINE_NAME"
Dim sm1 As New ServerManager()

        Using sm As Microsoft.Web.Administration.ServerManager = Microsoft.Web.Administration.ServerManager.OpenRemote(serverName)

            Dim counter As Integer = 1

            For Each Site As Microsoft.Web.Administration.Site In sm.Sites

                stringIIS = "Site: " & Site.Name & (vbNewLine)

                For Each app As Microsoft.Web.Administration.Application In sm.Sites(Site.Name).Applications
                    stringIIS = stringIIS & "        Physical Path: " & (vbTab & sm1.Sites(Site.Name).Applications("/").VirtualDirectories("/").PhysicalPath().ToString() & vbNewLine)

                    For Each virtDir As Microsoft.Web.Administration.VirtualDirectory In app.VirtualDirectories
                        stringIIS = stringIIS & "        Virtual Path: " & (vbTab & app.Path & vbNewLine)
                        stringIIS = stringIIS & vbNewLine
                    Next
                Next

                counter += 1

            Next

            iis.Text = stringIIS
            iis.Visible = True
        End Using
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...