Сопоставление пути к серверу вне IIS
-
19-08-2019 - |
Вопрос
У меня есть веб-приложение, куда пользователи могут загружать файлы.Файлы физически хранятся 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
сборка для вашего проекта.