Путь к серверу сопоставления вне IIS

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

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

ТИА / Хенрик


person Henrik Laursen    schedule 18.03.2009    source источник


Ответы (3)


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

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");
person Some Canuck    schedule 18.03.2009

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

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

Марк

person marc_s    schedule 18.03.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 в свой проект.

person Kev    schedule 18.03.2009