private HttpApplication GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
        {
            HttpApplication app = null;

            lock (_specialFreeList) {
                if (_numFreeSpecialAppInstances > 0)
                {
                    app = (HttpApplication)_specialFreeList.Pop();
                    _numFreeSpecialAppInstances--;
                }
            }

            if (app == null)
            {
                //
                //  Put the context on the thread, to make it available to anyone calling
                //  HttpContext.Current from the HttpApplication constructor or module Init
                //
                using (new DisposableHttpContextWrapper(context)) {
                    // If ran out of instances, create a new one
                    app = (HttpApplication)HttpRuntime.CreateNonPublicInstance(_theApplicationType);

                    using (new ApplicationImpersonationContext()) {
                        app.InitSpecial(_state, _eventHandlerMethods, appContext, context);
                    }
                }
            }

            return(app);
        }
        //
        //  Application instance management
        //

        private HttpApplication GetNormalApplicationInstance(HttpContext context)
        {
            HttpApplication app = null;

            lock (_freeList) {
                if (_numFreeAppInstances > 0)
                {
                    app = (HttpApplication)_freeList.Pop();
                    _numFreeAppInstances--;

                    if (_numFreeAppInstances < _minFreeAppInstances)
                    {
                        _minFreeAppInstances = _numFreeAppInstances;
                    }
                }
            }

            if (app == null)
            {
                // If ran out of instances, create a new one
                app = (HttpApplication)HttpRuntime.CreateNonPublicInstance(_theApplicationType);

                using (new ApplicationImpersonationContext()) {
                    app.InitInternal(context, _state, _eventHandlerMethods);
                }
            }

            if (AppSettings.UseTaskFriendlySynchronizationContext)
            {
                // When this HttpApplication instance is no longer in use, recycle it.
                app.ApplicationInstanceConsumersCounter = new CountdownTask(1); // representing required call to HttpApplication.ReleaseAppInstance
                app.ApplicationInstanceConsumersCounter.Task.ContinueWith((_, o) => RecycleApplicationInstance((HttpApplication)o), app, TaskContinuationOptions.ExecuteSynchronously);
            }
            return(app);
        }
Beispiel #3
0
        //
        //  Application instance management
        //

        private HttpApplication GetNormalApplicationInstance(HttpContext context)
        {
            HttpApplication app = null;

            lock (_freeList) {
                if (_numFreeAppInstances > 0)
                {
                    app = (HttpApplication)_freeList.Pop();
                    _numFreeAppInstances--;
                }
            }

            if (app == null)
            {
                // If ran out of instances, create a new one
                app = (HttpApplication)HttpRuntime.CreateNonPublicInstance(_theApplicationType);

                // be run while impersonating the token given by IIS (ASURT 112766)
                context.Impersonation.Start(true /*forGlobalCode*/, false /*throwOnError*/);

                try {
                    try {
                        app.InitInternal(context, _state, _eventHandlerMethods);
                    }
                    finally {
                        context.Impersonation.Stop();
                    }
                }
                catch { // Protect against exception filters
                    throw;
                }
            }

            return(app);
        }
Beispiel #4
0
        private HttpApplication GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
        {
            HttpApplication application = null;

            lock (this._specialFreeList)
            {
                if (this._numFreeSpecialAppInstances > 0)
                {
                    application = (HttpApplication)this._specialFreeList.Pop();
                    this._numFreeSpecialAppInstances--;
                }
            }
            if (application == null)
            {
                using (new DisposableHttpContextWrapper(context))
                {
                    application = (HttpApplication)HttpRuntime.CreateNonPublicInstance(this._theApplicationType);
                    using (new ApplicationImpersonationContext())
                    {
                        application.InitSpecial(this._state, this._eventHandlerMethods, appContext, context);
                    }
                }
            }
            return(application);
        }
Beispiel #5
0
        private HttpApplication GetNormalApplicationInstance(HttpContext context)
        {
            HttpApplication application = null;

            lock (this._freeList)
            {
                if (this._numFreeAppInstances > 0)
                {
                    application = (HttpApplication)this._freeList.Pop();
                    this._numFreeAppInstances--;
                    if (this._numFreeAppInstances < this._minFreeAppInstances)
                    {
                        this._minFreeAppInstances = this._numFreeAppInstances;
                    }
                }
            }
            if (application == null)
            {
                application = (HttpApplication)HttpRuntime.CreateNonPublicInstance(this._theApplicationType);
                using (new ApplicationImpersonationContext())
                {
                    application.InitInternal(context, this._state, this._eventHandlerMethods);
                }
            }
            return(application);
        }
Beispiel #6
0
        private HttpApplication GetSpecialApplicationInstance()
        {
            HttpApplication app = null;

            lock (_specialFreeList) {
                if (_numFreeSpecialAppInstances > 0)
                {
                    app = (HttpApplication)_specialFreeList.Pop();
                    _numFreeSpecialAppInstances--;
                }
            }

            if (app == null)
            {
                // If ran out of instances, create a new one
                app = (HttpApplication)HttpRuntime.CreateNonPublicInstance(_theApplicationType);
                app.InitSpecial(_state, _eventHandlerMethods);
            }

            return(app);
        }