Code:
/ DotNET / DotNET / 8.0 / untmp / Orcas / RTM / ndp / fx / src / xsp / System / Web / Extensions / Script / Services / ScriptHandlerFactory.cs / 1 / ScriptHandlerFactory.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Web.SessionState; namespace System.Web.Script.Services { internal class ScriptHandlerFactory : IHttpHandlerFactory { IHttpHandlerFactory _restHandlerFactory; IHttpHandlerFactory _webServiceHandlerFactory; internal class HandlerWrapper : IHttpHandler { protected IHttpHandler _originalHandler; private IHttpHandlerFactory _originalFactory; internal HandlerWrapper(IHttpHandler originalHandler, IHttpHandlerFactory originalFactory) { _originalFactory = originalFactory; _originalHandler = originalHandler; } internal void ReleaseHandler() { _originalFactory.ReleaseHandler(_originalHandler); } public bool IsReusable { get { return _originalHandler.IsReusable; } } public void ProcessRequest(HttpContext context) { _originalHandler.ProcessRequest(context); } } internal class HandlerWrapperWithSession : HandlerWrapper, IRequiresSessionState { internal HandlerWrapperWithSession(IHttpHandler originalHandler, IHttpHandlerFactory originalFactory) : base(originalHandler, originalFactory) {} } private class AsyncHandlerWrapper : HandlerWrapper, IHttpAsyncHandler { internal AsyncHandlerWrapper(IHttpHandler originalHandler, IHttpHandlerFactory originalFactory) : base(originalHandler, originalFactory) { } public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { return ((IHttpAsyncHandler)_originalHandler).BeginProcessRequest(context, cb, extraData); } public void EndProcessRequest(IAsyncResult result) { ((IHttpAsyncHandler)_originalHandler).EndProcessRequest(result); } } private class AsyncHandlerWrapperWithSession : AsyncHandlerWrapper, IRequiresSessionState { internal AsyncHandlerWrapperWithSession(IHttpHandler originalHandler, IHttpHandlerFactory originalFactory) : base(originalHandler, originalFactory) { } } public ScriptHandlerFactory() { _restHandlerFactory = new RestHandlerFactory(); _webServiceHandlerFactory = new System.Web.Services.Protocols.WebServiceHandlerFactory(); } public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) { IHttpHandler handler; IHttpHandlerFactory factory; if (RestHandlerFactory.IsRestRequest(context)) { // It's a REST request factory = _restHandlerFactory; } else { // It's a regular asmx web request, so delegate to the WebServiceHandlerFactory factory = _webServiceHandlerFactory; } handler = factory.GetHandler(context, requestType, url, pathTranslated); bool requiresSession = handler is IRequiresSessionState; if (handler is IHttpAsyncHandler) { if (requiresSession) return new AsyncHandlerWrapperWithSession(handler, factory); else return new AsyncHandlerWrapper(handler, factory); } if (requiresSession) return new HandlerWrapperWithSession(handler, factory); else return new HandlerWrapper(handler, factory); } public virtual void ReleaseHandler(IHttpHandler handler) { if (handler == null) { throw new ArgumentNullException("handler"); } ((HandlerWrapper)handler).ReleaseHandler(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LeaseManager.cs
- ListBindingConverter.cs
- CompositionTarget.cs
- HtmlToClrEventProxy.cs
- DataGridRow.cs
- SizeAnimationUsingKeyFrames.cs
- FlowDocumentReaderAutomationPeer.cs
- IListConverters.cs
- DesignerSerializationVisibilityAttribute.cs
- PerformanceCounterManager.cs
- FormView.cs
- TearOffProxy.cs
- NumericExpr.cs
- HandlerBase.cs
- SafeProcessHandle.cs
- BooleanFacetDescriptionElement.cs
- ContentValidator.cs
- SignatureHelper.cs
- PointLight.cs
- GeneratedContractType.cs
- ProfileParameter.cs
- DesignerTransactionCloseEvent.cs
- DisplayClaim.cs
- NumberFormatInfo.cs
- ProxyHwnd.cs
- SendSecurityHeaderElement.cs
- JournalEntryListConverter.cs
- DeviceSpecificDesigner.cs
- ImageButton.cs
- StorageFunctionMapping.cs
- XmlKeywords.cs
- FieldNameLookup.cs
- SystemResourceHost.cs
- FaultHandlingFilter.cs
- WebPartUtil.cs
- ToolboxComponentsCreatingEventArgs.cs
- filewebresponse.cs
- ScrollPattern.cs
- WebHttpBinding.cs
- TextBoxLine.cs
- UnhandledExceptionEventArgs.cs
- DataComponentMethodGenerator.cs
- Stream.cs
- UserControl.cs
- GenericUI.cs
- ConfigurationPropertyAttribute.cs
- DispatcherExceptionFilterEventArgs.cs
- ValueQuery.cs
- ScrollChangedEventArgs.cs
- TypeUtil.cs
- ProcessHostConfigUtils.cs
- HtmlHistory.cs
- PersianCalendar.cs
- ThreadExceptionEvent.cs
- Point3DCollection.cs
- SQLRoleProvider.cs
- DictionarySectionHandler.cs
- ToolStripDropDownItemDesigner.cs
- RuntimeArgumentHandle.cs
- EdmProviderManifest.cs
- storagemappingitemcollection.viewdictionary.cs
- ParentQuery.cs
- SqlCacheDependencyDatabaseCollection.cs
- TextTreeFixupNode.cs
- updatecommandorderer.cs
- SplineQuaternionKeyFrame.cs
- GridViewDeletedEventArgs.cs
- ValidationContext.cs
- TextDecorationCollection.cs
- MeasureItemEvent.cs
- ZipIORawDataFileBlock.cs
- ListViewItemCollectionEditor.cs
- MenuAutomationPeer.cs
- ShellProvider.cs
- Point.cs
- Object.cs
- CngProvider.cs
- DataGridRowHeaderAutomationPeer.cs
- ToolStripItem.cs
- HtmlUtf8RawTextWriter.cs
- Literal.cs
- WebColorConverter.cs
- BroadcastEventHelper.cs
- MimeTextImporter.cs
- DispatcherExceptionFilterEventArgs.cs
- CharAnimationUsingKeyFrames.cs
- UInt64.cs
- DefaultAssemblyResolver.cs
- DelegateTypeInfo.cs
- InputScope.cs
- FlowLayoutSettings.cs
- SystemIPAddressInformation.cs
- XmlAttributeAttribute.cs
- SessionEndingCancelEventArgs.cs
- NativeActivityFaultContext.cs
- XmlAnyElementAttribute.cs
- FastEncoder.cs
- WbemException.cs
- PermissionToken.cs
- DurableOperationContext.cs