IIS перезапускается при удалении / сохранении файла на сервере и проигрышном сеансе - PullRequest
3 голосов
/ 15 декабря 2010

У меня есть опция удаления файлов для файлов, загруженных пользователем, пользователь может загружать много файлов одновременно. Загруженные файлы будут храниться в папке на сервере, а когда их удаляют, они перемещаются в папку корзины, откудаон будет очищен вручную.

, когда пользователь пытается удалить много файлов на веб-странице, зависания IIS и весь сеанс истек.Этот случай присутствует только на сервере, на локальном хосте эта проблема недоступна.

ВСЕ операции выполнены полностью, т. Е.

  • База данных обновляется.

  • Файлы перемещаются из папки загрузки в корзину на сервере.

Я не могу определить, что происходит, я просто попытался полностью удалить много файлов около 35-36 МБ.Если процесс занимает много времени или нужно внести какие-либо изменения, чтобы выполнить операцию с большими файлами, мой проект выполнен на VS2005, работающем на сервере 2008, пожалуйста, помогите ...

Ответы [ 3 ]

3 голосов
/ 15 декабря 2010

Если вы удалите файл / папку на своем веб-сайте или в виртуальном каталоге, ваше веб-приложение будет перезапущено, что приведет к удалению всех (незавершенных) сеансов.Решение было бы довольно простым - убедитесь, что вы храните свои файлы вне каталога вашего веб-сайта.

1 голос
/ 15 декабря 2010

Альтернативное решение: отделите состояние сеанса от вашего процесса, используя SQL Server в качестве менеджера состояний или службу ASP.Net State Manager.Для этого потребуется, чтобы все ваши сеансовые объекты были сериализуемыми.

0 голосов
/ 06 сентября 2013

старое сообщение, но нашел решение на другом форуме для тех, кто все еще оказывается здесь после поиска ...

http://forums.asp.net/p/1144478/1849837.aspx

PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);

FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);

MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });

.. и добавить егохорошее место, например Application_Start в global.asax

Вы должны добавить «using System.Reflection» в Global.asax.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...