Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / Hosting / ISAPIRuntime.cs / 1 / ISAPIRuntime.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * The ASP.NET runtime services * * Copyright (c) 1998 Microsoft Corporation */ namespace System.Web.Hosting { using System.Runtime.InteropServices; using System.Collections; using System.Reflection; using System.Threading; using System.Web; using System.Web.Management; using System.Web.Util; using System.Globalization; using System.Security.Permissions; ////// ///[To be supplied.] ///// NOTE: There is no link demand here because it causes a 7% perf regression. // there is a Demand on the .ctor for ISAPIRuntime, which provides the same level of // security, except that we only take a one time perf hit when an instance is created. [ComImport, Guid("08a2c56f-7c16-41c1-a8be-432917a1a2d1"), System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)] public interface IISAPIRuntime { /// /// void StartProcessing(); ///[To be supplied.] ////// void StopProcessing(); ///[To be supplied.] ////// [return: MarshalAs(UnmanagedType.I4)] int ProcessRequest( [In] IntPtr ecb, [In, MarshalAs(UnmanagedType.I4)] int useProcessModel); ///[To be supplied.] ////// void DoGCCollect(); } ///[To be supplied.] ////// ///[To be supplied.] ///// NOTE: There is no link demand here because it causes a 7% perf regression. // there is a Demand on the .ctor for ISAPIRuntime, which provides the same level of // security, except that we only take a one time perf hit when an instance is created. public sealed class ISAPIRuntime : MarshalByRefObject, IISAPIRuntime, IRegisteredObject { // WARNING: do not modify without making corresponding changes in appdomains.h private const int WORKER_REQUEST_TYPE_IN_PROC = 0x0; private const int WORKER_REQUEST_TYPE_OOP = 0x1; private const int WORKER_REQUEST_TYPE_IN_PROC_VERSION_2 = 0x2; // to control removal from unmanaged table (to it only once) private static int _isThisAppDomainRemovedFromUnmanagedTable; [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public ISAPIRuntime() { HostingEnvironment.RegisterObject(this); } public override Object InitializeLifetimeService() { return null; // never expire lease } /// /// public void StartProcessing() { Debug.Trace("ISAPIRuntime", "StartProcessing"); } ///[To be supplied.] ////// public void StopProcessing() { Debug.Trace("ISAPIRuntime", "StopProcessing"); HostingEnvironment.UnregisterObject(this); } /* * Process one ISAPI request * * @param ecb ECB * @param useProcessModel flag set to true when out-of-process */ ///[To be supplied.] ////// public int ProcessRequest(IntPtr ecb, int iWRType) { IntPtr pHttpCompletion = IntPtr.Zero; if (iWRType == WORKER_REQUEST_TYPE_IN_PROC_VERSION_2) { pHttpCompletion = ecb; ecb = UnsafeNativeMethods.GetEcb(pHttpCompletion); } ISAPIWorkerRequest wr = null; try { bool useOOP = (iWRType == WORKER_REQUEST_TYPE_OOP); wr = ISAPIWorkerRequest.CreateWorkerRequest(ecb, useOOP); wr.Initialize(); // check if app path matches (need to restart app domain?) String wrPath = wr.GetAppPathTranslated(); String adPath = HttpRuntime.AppDomainAppPathInternal; if (adPath == null || StringUtil.EqualsIgnoreCase(wrPath, adPath)) { HttpRuntime.ProcessRequestNoDemand(wr); return 0; } else { // need to restart app domain HttpRuntime.ShutdownAppDomain(ApplicationShutdownReason.PhysicalApplicationPathChanged, SR.GetString(SR.Hosting_Phys_Path_Changed, adPath, wrPath)); return 1; } } catch(Exception e) { try { WebBaseEvent.RaiseRuntimeError(e, this); } catch {} // Have we called HSE_REQ_DONE_WITH_SESSION? If so, don't re-throw. if (wr != null && wr.Ecb == IntPtr.Zero) { if (pHttpCompletion != IntPtr.Zero) { UnsafeNativeMethods.SetDoneWithSessionCalled(pHttpCompletion); } // if this is a thread abort exception, cancel the abort if (e is ThreadAbortException) { Thread.ResetAbort(); } // IMPORTANT: if this thread is being aborted because of an AppDomain.Unload, // the CLR will still throw an AppDomainUnloadedException. The native caller // must special case COR_E_APPDOMAINUNLOADED(0x80131014) and not // call HSE_REQ_DONE_WITH_SESSION more than once. return 0; } // re-throw if we have not called HSE_REQ_DONE_WITH_SESSION throw; } } ///[To be supplied.] ////// public void DoGCCollect() { for (int c = 10; c > 0; c--) { System.GC.Collect(); } } ///[To be supplied.] ///void IRegisteredObject.Stop(bool immediate) { RemoveThisAppDomainFromUnmanagedTable(); HostingEnvironment.UnregisterObject(this); } internal static void RemoveThisAppDomainFromUnmanagedTable() { if (Interlocked.Exchange(ref _isThisAppDomainRemovedFromUnmanagedTable, 1) != 0) { return; } try { String appId = HttpRuntime.AppDomainAppIdInternal; if (appId != null ) { Debug.Trace("ISAPIRuntime", "Calling UnsafeNativeMethods.AppDomainRestart appId=" + appId); UnsafeNativeMethods.AppDomainRestart(appId); } HttpRuntime.AddAppDomainTraceMessage(SR.GetString(SR.App_Domain_Restart)); } catch { } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * The ASP.NET runtime services * * Copyright (c) 1998 Microsoft Corporation */ namespace System.Web.Hosting { using System.Runtime.InteropServices; using System.Collections; using System.Reflection; using System.Threading; using System.Web; using System.Web.Management; using System.Web.Util; using System.Globalization; using System.Security.Permissions; ////// ///[To be supplied.] ///// NOTE: There is no link demand here because it causes a 7% perf regression. // there is a Demand on the .ctor for ISAPIRuntime, which provides the same level of // security, except that we only take a one time perf hit when an instance is created. [ComImport, Guid("08a2c56f-7c16-41c1-a8be-432917a1a2d1"), System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)] public interface IISAPIRuntime { /// /// void StartProcessing(); ///[To be supplied.] ////// void StopProcessing(); ///[To be supplied.] ////// [return: MarshalAs(UnmanagedType.I4)] int ProcessRequest( [In] IntPtr ecb, [In, MarshalAs(UnmanagedType.I4)] int useProcessModel); ///[To be supplied.] ////// void DoGCCollect(); } ///[To be supplied.] ////// ///[To be supplied.] ///// NOTE: There is no link demand here because it causes a 7% perf regression. // there is a Demand on the .ctor for ISAPIRuntime, which provides the same level of // security, except that we only take a one time perf hit when an instance is created. public sealed class ISAPIRuntime : MarshalByRefObject, IISAPIRuntime, IRegisteredObject { // WARNING: do not modify without making corresponding changes in appdomains.h private const int WORKER_REQUEST_TYPE_IN_PROC = 0x0; private const int WORKER_REQUEST_TYPE_OOP = 0x1; private const int WORKER_REQUEST_TYPE_IN_PROC_VERSION_2 = 0x2; // to control removal from unmanaged table (to it only once) private static int _isThisAppDomainRemovedFromUnmanagedTable; [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public ISAPIRuntime() { HostingEnvironment.RegisterObject(this); } public override Object InitializeLifetimeService() { return null; // never expire lease } /// /// public void StartProcessing() { Debug.Trace("ISAPIRuntime", "StartProcessing"); } ///[To be supplied.] ////// public void StopProcessing() { Debug.Trace("ISAPIRuntime", "StopProcessing"); HostingEnvironment.UnregisterObject(this); } /* * Process one ISAPI request * * @param ecb ECB * @param useProcessModel flag set to true when out-of-process */ ///[To be supplied.] ////// public int ProcessRequest(IntPtr ecb, int iWRType) { IntPtr pHttpCompletion = IntPtr.Zero; if (iWRType == WORKER_REQUEST_TYPE_IN_PROC_VERSION_2) { pHttpCompletion = ecb; ecb = UnsafeNativeMethods.GetEcb(pHttpCompletion); } ISAPIWorkerRequest wr = null; try { bool useOOP = (iWRType == WORKER_REQUEST_TYPE_OOP); wr = ISAPIWorkerRequest.CreateWorkerRequest(ecb, useOOP); wr.Initialize(); // check if app path matches (need to restart app domain?) String wrPath = wr.GetAppPathTranslated(); String adPath = HttpRuntime.AppDomainAppPathInternal; if (adPath == null || StringUtil.EqualsIgnoreCase(wrPath, adPath)) { HttpRuntime.ProcessRequestNoDemand(wr); return 0; } else { // need to restart app domain HttpRuntime.ShutdownAppDomain(ApplicationShutdownReason.PhysicalApplicationPathChanged, SR.GetString(SR.Hosting_Phys_Path_Changed, adPath, wrPath)); return 1; } } catch(Exception e) { try { WebBaseEvent.RaiseRuntimeError(e, this); } catch {} // Have we called HSE_REQ_DONE_WITH_SESSION? If so, don't re-throw. if (wr != null && wr.Ecb == IntPtr.Zero) { if (pHttpCompletion != IntPtr.Zero) { UnsafeNativeMethods.SetDoneWithSessionCalled(pHttpCompletion); } // if this is a thread abort exception, cancel the abort if (e is ThreadAbortException) { Thread.ResetAbort(); } // IMPORTANT: if this thread is being aborted because of an AppDomain.Unload, // the CLR will still throw an AppDomainUnloadedException. The native caller // must special case COR_E_APPDOMAINUNLOADED(0x80131014) and not // call HSE_REQ_DONE_WITH_SESSION more than once. return 0; } // re-throw if we have not called HSE_REQ_DONE_WITH_SESSION throw; } } ///[To be supplied.] ////// public void DoGCCollect() { for (int c = 10; c > 0; c--) { System.GC.Collect(); } } ///[To be supplied.] ///void IRegisteredObject.Stop(bool immediate) { RemoveThisAppDomainFromUnmanagedTable(); HostingEnvironment.UnregisterObject(this); } internal static void RemoveThisAppDomainFromUnmanagedTable() { if (Interlocked.Exchange(ref _isThisAppDomainRemovedFromUnmanagedTable, 1) != 0) { return; } try { String appId = HttpRuntime.AppDomainAppIdInternal; if (appId != null ) { Debug.Trace("ISAPIRuntime", "Calling UnsafeNativeMethods.AppDomainRestart appId=" + appId); UnsafeNativeMethods.AppDomainRestart(appId); } HttpRuntime.AddAppDomainTraceMessage(SR.GetString(SR.App_Domain_Restart)); } catch { } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FieldToken.cs
- CaseInsensitiveHashCodeProvider.cs
- PermissionListSet.cs
- SqlRemoveConstantOrderBy.cs
- TextTreeTextNode.cs
- OleDbCommandBuilder.cs
- XappLauncher.cs
- EpmCustomContentWriterNodeData.cs
- BaseCodePageEncoding.cs
- IntellisenseTextBox.cs
- OleDbReferenceCollection.cs
- HttpInputStream.cs
- MonthCalendarDesigner.cs
- XamlWriterExtensions.cs
- ColumnClickEvent.cs
- SizeChangedEventArgs.cs
- StandardOleMarshalObject.cs
- ForeignKeyConstraint.cs
- DbMetaDataColumnNames.cs
- StatusBar.cs
- SoundPlayer.cs
- oledbmetadatacolumnnames.cs
- AnimationException.cs
- DeferredElementTreeState.cs
- DetailsViewAutoFormat.cs
- Emitter.cs
- Geometry3D.cs
- ServiceDescriptionContext.cs
- DataSysAttribute.cs
- tooltip.cs
- MatrixCamera.cs
- ExpandoClass.cs
- PartitionerStatic.cs
- WpfWebRequestHelper.cs
- SoapRpcServiceAttribute.cs
- BasicKeyConstraint.cs
- AddInSegmentDirectoryNotFoundException.cs
- milrender.cs
- DesignerActionPanel.cs
- CodePageUtils.cs
- EngineSiteSapi.cs
- DetailsViewRowCollection.cs
- WindowsSysHeader.cs
- DataViewSettingCollection.cs
- LoadRetryConstantStrategy.cs
- AvTrace.cs
- UInt64.cs
- MimeWriter.cs
- StaticDataManager.cs
- Visual.cs
- BaseDataBoundControl.cs
- BidOverLoads.cs
- _ConnectOverlappedAsyncResult.cs
- Fx.cs
- ZipPackage.cs
- HtmlDocument.cs
- TreeViewAutomationPeer.cs
- XpsTokenContext.cs
- XmlSecureResolver.cs
- SystemIPGlobalStatistics.cs
- DrawingImage.cs
- LocalizedNameDescriptionPair.cs
- DataPagerFieldItem.cs
- EntitySetBase.cs
- CompareValidator.cs
- PrintPageEvent.cs
- KeyValueConfigurationCollection.cs
- XmlILConstructAnalyzer.cs
- VideoDrawing.cs
- SqlXml.cs
- Property.cs
- nulltextcontainer.cs
- ObjectKeyFrameCollection.cs
- HtmlTable.cs
- MulticastDelegate.cs
- EDesignUtil.cs
- ResourceSetExpression.cs
- ConnectionManagementElement.cs
- DataMisalignedException.cs
- SqlCacheDependency.cs
- DataGridSortingEventArgs.cs
- Stack.cs
- TypeInfo.cs
- GridViewRowPresenter.cs
- DataControlImageButton.cs
- DataGridViewEditingControlShowingEventArgs.cs
- _NtlmClient.cs
- StreamSecurityUpgradeAcceptorBase.cs
- RangeBase.cs
- serverconfig.cs
- RequestCache.cs
- WebPartCollection.cs
- XmlLoader.cs
- Triplet.cs
- storepermissionattribute.cs
- DispatcherHookEventArgs.cs
- ExecutedRoutedEventArgs.cs
- DesignerTextWriter.cs
- HttpWebRequest.cs
- EntityStoreSchemaFilterEntry.cs