Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Henrik LaursenОтветов: 3

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

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

ТИА / Хенрик

iisadministration

Ответы

Ответ 1 · рейтинг 2 · Some Canuck

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

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");

Ответ 2 · marc_s

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

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

Марк

Ответ 3 · Kev

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы