Вопрос

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

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

ТИА /Хенрик

Это было полезно?

Решение

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

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

Другие советы

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

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

Марк

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

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 является "корневым" приложением вашего веб-сайта.Вам всегда нужна эта часть.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top