Здравствуйте, Koss87, Вы писали:
K>Доброго времени суток 8)
K>итак ситуация заключается в следующем:
K>1- есть функция которая формерует отчет в формате ПДФ она записует данный в физическую дерикторию на сервере (файл физически создан ... подробности упускаю) K>2- после нажатия кнопки на форме пользователю предоставляется возможность скачать файл (файлы скачиваются четко) K>3- вовремя скачивания файла запускается поток который вызывает функцию удаляющую файл по истечению времени (допустим срок годности один час)
Я бы все сделал синхронно. Просто перед каждой операцией над каталогом (добовление файла, скачивание файла) вызывал бы метод УдалитьВсеСтарыеФайлы.
Здравствуйте, Koss87, Вы писали:
L>>Если есть доступ к виндовому шедулеру, то написать батник, удаляющий устаревшие файлы. И запускать его по расписанию. L>>Дешево и сердито.
K>не спорю вариант клевый, но если учитывать что даже если есть доступ к серваку прямой)) то можно и самому раз в неделю удалять 8),
Я имел в виду запуск на сервере, не с внешнего компьютера.
K>меня интересует именно способы удаления прямо из самой веб апликации. Веть не спорю батник повесить в винде на авто выполнение не так уж и сложно, другое дело как по средствам АСПА и СИ шарпа можно это зделать.. (
Это самоцель?
Если нет, то задачу всегда нужно решать наиболее простым способом. Запуск батника как раз из разряда таких.
Здравствуйте, Koss87, Вы писали:
K>1- есть функция которая формерует отчет в формате ПДФ она записует данный в физическую дерикторию на сервере (файл физически создан ... подробности упускаю) K>2- после нажатия кнопки на форме пользователю предоставляется возможность скачать файл (файлы скачиваются четко) K>3- вовремя скачивания файла запускается поток который вызывает функцию удаляющую файл по истечению времени (допустим срок годности один час)
я бы держал один поток, который просыпался бы раз в час и удалял из папки все файлы, созданые ранее чем час назад.
Здравствуйте, Koss87, Вы писали:
K>Здравствуйте, seregaa, Вы писали: S>>я бы держал один поток, который просыпался бы раз в час и удалял из папки все файлы, созданые ранее чем час назад. K>приведи пример пожалуйста кода реализации "даржания потока" и пример кода проверки файлов в папке..
Типа того:
{
...
Thread a = new Thread(new ThreadStart(DeleteFile));
a.Start();
...
}
private void DeleteFile()
{
string tempDir = @"c:\temp";
TimeSpan age = new TimeSpan(1, 0, 0);
foreach(string fileName in Directory.GetFiles(tempDir)
{
if(DateTime.Now - File.GetCreationTime(fileName) > age)
File.Delete(fileName)
}
Thread.Sleep(3600000);
}
Здравствуйте, Koss87, Вы писали:
K>какие последствия вызова потока со слипом в час или день?
Создание потока довольно дорого, например по умолчанию кушается 1МБ виртуальной памяти. Т.к. в вашем решении потоки будут жить долго, то и ресурсов сервера будет тратится прилично. Это отрицательно скажется на масштабируемости.
K>--- проживет ли поток час или день?
Процесс в котором выполняется ваше серверное приложение может регулярно перезапускаться, поэтому выживание потока не гарантировано.
K>--- сможет ли он удалить файл по истечению столь долгого времени и после закрытия юзером окна браузера?
Если поток останется жить, то файл удалится. Открыт браузер или нет не имеет значения.
K>--- могут ли потоки вызвать какие либо ошибки на сервере и не удалить файлы? K>--- поистечению времени и удаления файла потоки умрут или нет?
Умрут. K>--- если потоки не умрут то как их убить без участия пользователя (пользователь закончил работать вырубил клиентский комп и ушел дамой 8)? K>--- и в общем кто может сказать хороший ли это способ удалять файлы по истечению времени и какие есть альтернативные способы
Я бы сделал что-то вроде очереди сообщений на удаление файла. Для реализации можно использовать базу данных либо MSMQ.
Очередь регулярно просматривается и при необходимости удаляются файлы.
K>просьба отвечать как можно полнее и если есть примеры любых технологий приводите примеры ПЛЗ!!
K>С уважением Koss87
Если в таком коде будет Exception то упадет все вплоть до рестарта w3wp.
Самый лучший способ предложен Аlexey.
Я бы сделал службу Windows, которой в очередь отправлял файлы, и пусть она следит за ними.
Здравствуйте, C...R...a...S...H, Вы писали:
CRA>Если в таком коде будет Exception то упадет все вплоть до рестарта w3wp. CRA>Самый лучший способ предложен Аlexey. CRA>Я бы сделал службу Windows, которой в очередь отправлял файлы, и пусть она следит за ними.
Что мешает добавить в этот код обработку ошибок? Это ведь было не готовое решение, а прототип, иллюстрация.
А прикручивать очередь или сервис только для удаления временных файлов имхо есть овердизайн. Сама папка с файлами и есть очередь, где порядок элементов определяется датой создания.
1- есть функция которая формерует отчет в формате ПДФ она записует данный в физическую дерикторию на сервере (файл физически создан ... подробности упускаю)
2- после нажатия кнопки на форме пользователю предоставляется возможность скачать файл (файлы скачиваются четко)
3- вовремя скачивания файла запускается поток который вызывает функцию удаляющую файл по истечению времени (допустим срок годности один час)
вызов потока
{
...
Thread a = new Thread(new ThreadStart(DeleteFile));
a.Start();
...
}
файлы удаляються тоже нормально(при слипе 30 секунд) на час не пробывал ибо времени нету тестить (
Вопрос!!!
какие последствия вызова потока со слипом в час или день?
--- проживет ли поток час или день?
--- сможет ли он удалить файл по истечению столь долгого времени и после закрытия юзером окна браузера?
--- могут ли потоки вызвать какие либо ошибки на сервере и не удалить файлы?
--- поистечению времени и удаления файла потоки умрут или нет?
--- если потоки не умрут то как их убить без участия пользователя (пользователь закончил работать вырубил клиентский комп и ушел дамой 8)?
--- и в общем кто может сказать хороший ли это способ удалять файлы по истечению времени и какие есть альтернативные способы
просьба отвечать как можно полнее и если есть примеры любых технологий приводите примеры ПЛЗ!!
Здравствуйте, Аlexey, Вы писали:
А>Я бы сделал что-то вроде очереди сообщений на удаление файла. Для реализации можно использовать базу данных либо MSMQ. А>Очередь регулярно просматривается и при необходимости удаляются файлы.
могбы ты привести примеры кода , или ссылки на литературу де можно прочитать про эту фишку? ато очень интерестно как зделать...
Здравствуйте, seregaa, Вы писали: S>я бы держал один поток, который просыпался бы раз в час и удалял из папки все файлы, созданые ранее чем час назад.
приведи пример пожалуйста кода реализации "даржания потока" и пример кода проверки файлов в папке..
Здравствуйте, Mike Chaliy, Вы писали: MC>Я бы все сделал синхронно. Просто перед каждой операцией над каталогом (добовление файла, скачивание файла) вызывал бы метод УдалитьВсеСтарыеФайлы.
как я до этого не дошел, я думаю если например доделать этот вариант, ф-цию на удаление старых файлов сделать действительно в начале перед созданием и после скачивания повесить эту функцию в поток на час, если даже поток умрет до того как будет созданы новые файлы и не удалит по каким либо причинам старые файлы, то во время создания файлов уж точно удалит)))))
Но всетаки если есть у когото еще варианты прошу предлогать)
Здравствуйте, Lloyd, Вы писали:
L>Если есть доступ к виндовому шедулеру, то написать батник, удаляющий устаревшие файлы. И запускать его по расписанию. L>Дешево и сердито.
не спорю вариант клевый, но если учитывать что даже если есть доступ к серваку прямой)) то можно и самому раз в неделю удалять 8), меня интересует именно способы удаления прямо из самой веб апликации. Веть не спорю батник повесить в винде на авто выполнение не так уж и сложно, другое дело как по средствам АСПА и СИ шарпа можно это зделать.. (
Здравствуйте, C...R...a...S...H, Вы писали:
CRA>Здравствуйте, Koss87, Вы писали:
CRA>Может быть вам тогда на AppStart все это дело просто удалять? CRA>И не париться?
Да и каждых пару часов делать АутОфМемори, так чтобы этот AppStart наступал .
На многих хостингах время жизни приложения ограничено. Если к нему нет обращений в течении, скажем, 20 минут, то оно высвобождается, я правильно понимаю?
Вариант с таким спящим потом мне нравится, но что если его будить каждые, скажем, 5 минут, не для полезной работы, а просто, для поддержания приложения живым, а раз в час загружать полезной работой, тогда приложение не умрёт в течении долгого срока?