Переменные приложения ASP.NET устанавливаются в нуль после использования в Threadpool - PullRequest
1 голос
/ 12 июля 2011

В моем приложении ASP.NET есть статический класс, который я использую для хранения класса обработки данных всего приложения, используемого для управления длительными пакетными операциями, отправляемыми пользователями.Это должен быть одноэлементный объект, так как это довольно тяжелый объект.

public static class WebGISGlobals
{
    private static MultiStatutoryMapPrintProcessor _batchPrintProcessor;

    public static MultiStatutoryMapPrintProcessor BatchPrintProcessor
    {
        get
        {
            if (_batchPrintProcessor == null)
            {
                _batchPrintProcessor = new MultiStatutoryMapPrintProcessor(
                    (string)ConfigurationManager.AppSettings["statPrintWebServiceUrl"], HttpContext.Current.Server.MapPath("~/downloads"));
            }

            return _batchPrintProcessor;
        }
    }

}

Этот класс процессора передает пакетные задачи в Threadpool для выполнения, и все работает хорошо ...

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

Я пытался использовать Application["BatchProcessor"] для сохранения экземпляра моего класса для всех, чтобы ссылаться, но это имеет тот же эффект.

Нигде в моемкод, я должен избавиться от экземпляра или установить его как ноль, чтобы я застрял.

У кого-нибудь есть какие-нибудь яркие идеи.

ОБНОВЛЕНИЕ:

После предложения от rsbarro я запустилтрассировка стека при выполнении потока, и она не показывает каких-либо исключений при запуске.

>   WebFGH.DLL!FGH.Global.Application_End(object sender = {System.Web.HttpApplicationFactory}, System.EventArgs e = {System.EventArgs}) Line 167    C#
[Native to Managed Transition]  
[Managed to Native Transition]  
System.Web.dll!System.Web.HttpApplication.ProcessSpecialRequest(System.Web.HttpContext context = null, System.Reflection.MethodInfo method, int paramCount, object eventSource, System.EventArgs eventArgs, System.Web.SessionState.HttpSessionState session) + 0x110 bytes 
System.Web.dll!System.Web.HttpApplicationFactory.FireApplicationOnEnd() + 0x56 bytes    
System.Web.dll!System.Web.HttpApplicationFactory.Dispose() + 0x109 bytes    
System.Web.dll!System.Web.HttpRuntime.Dispose() + 0x114 bytes   
System.Web.dll!System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(object state) + 0x35 bytes 
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(object state) + 0x2f bytes   
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes    
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(System.Threading._ThreadPoolWaitCallback tpWaitCallBack) + 0x53 bytes 
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(object state) + 0x59 bytes    
[Appdomain Transition]  

1 Ответ

0 голосов
/ 12 июля 2011

Если в вашем коде ничего не обнуляется _batchPrintProcessor, то возможная причина поведения, которое вы видите, состоит в том, что ваше приложение ASP.NET закрывается (или перезапускается) IIS.По умолчанию пулы приложений в IIS 7.5 отключаются каждые 20 минут, если не выполняется никаких действий.Ваше приложение также будет перезапущено ASP.NET/IIS по ряду причин, включая изменения в каталоге bin, необработанные исключения в порожденных потоках и т. Д.

Чтобы проверить, является ли это проблемой, просто добавьте несколькоВнесение кода в события Application_Start и Application_End в вашем Global.asax.

См. также: Что вызывает перезапуск пула приложений в IIS?

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