Отображение пути к серверу вне IIS - PullRequest
2 голосов
/ 18 марта 2009

У меня есть веб-приложение, в которое пользователи могут загружать файлы. Файлы физически хранятся IIS в виртуальной папке, которая сопоставлена ​​с внешним устройством хранения. Запись о каждом загруженном файле хранится в базе данных. Запись базы данных содержит информацию о том, является ли файл все еще «активным» (не был удален пользователем), и путь к виртуальной папке (например: / storage1 / test)

Теперь я хотел бы периодически запускать административную задачу вне IIS, которая извлекает список всех файлов, которые больше не являются «активными», и удаляет их из физического хранилища. Я хотел бы, чтобы административная задача выполнялась вне IIS как запланированная задача или служба Windows. Однако я не могу понять, как сопоставить путь к виртуальной папке, который хранится в записи базы данных, с физическим путем во внешнем процессе. Есть ли способ «подключиться» к IIS из внешнего процесса или любой другой умный способ сделать это? (или я иду совсем не в том направлении).

ТИА / Хенрик

Ответы [ 3 ]

2 голосов
/ 18 марта 2009

Вам нужно добавить ссылку на System.Web в вашем проекте.

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");
0 голосов
/ 18 марта 2009

Если вам нужно получить этот путь программно, вы можете сделать что-то вроде:

using(DirectoryEntry de = 
    new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test"))
{
    string pathToFiles = de.Properties["Path"].Value;

    // Do my file tidy up tasks....
}

Есть несколько вещей, на которые стоит обратить внимание:

  • Число '1' на пути DirectoryEntry конструктор IIS номер сайта.

  • В пути IIS://Localhost/w3svc/1/root/storage1/test, первая часть IIS://Localhost/w3svc/1/root есть «корневое» приложение вашего сайта. Вам всегда нужна эта часть.

  • Вам необходимо добавить ссылку на System.DirectoryServices сборка к вашему проекту.

0 голосов
/ 18 марта 2009

Если ваше приложение является приложением ASP.NET, вы можете исследовать вызов Server.MapPath - если вы используете тот же виртуальный каталог, что и основное приложение.

В противном случае я бы предложил сохранить «базовый путь» (который соответствует пути виртуального каталога) в конфигурации для внешнего приложения и просто объединить этот базовый путь и путь к файлу в полный путь.

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...