Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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. // //----------------------------------------------------------------------------- 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XamlStyleSerializer.cs
- BezierSegment.cs
- Inflater.cs
- DateTimeFormatInfo.cs
- FileReader.cs
- AxisAngleRotation3D.cs
- SystemKeyConverter.cs
- SimpleTextLine.cs
- DesignerUtils.cs
- RootDesignerSerializerAttribute.cs
- WeakEventManager.cs
- CustomErrorCollection.cs
- MappingException.cs
- UserThread.cs
- MetadataCache.cs
- XmlDataSource.cs
- EventHandlerList.cs
- FixedDocumentSequencePaginator.cs
- WebConfigurationManager.cs
- NativeMethods.cs
- ModelChangedEventArgsImpl.cs
- PageVisual.cs
- FixUp.cs
- CodeBlockBuilder.cs
- SecUtil.cs
- UnsafeNetInfoNativeMethods.cs
- AssertUtility.cs
- StringExpressionSet.cs
- SchemaImporterExtension.cs
- QilStrConcat.cs
- SecurityHeader.cs
- TableTextElementCollectionInternal.cs
- XmlElementList.cs
- XamlFigureLengthSerializer.cs
- SqlVersion.cs
- EmissiveMaterial.cs
- _Win32.cs
- PreviewKeyDownEventArgs.cs
- WebPartTransformerAttribute.cs
- Regex.cs
- Perspective.cs
- RotationValidation.cs
- ListBox.cs
- TreeViewEvent.cs
- DataFieldEditor.cs
- XmlSyndicationContent.cs
- SqlConnectionStringBuilder.cs
- IntSecurity.cs
- ADMembershipProvider.cs
- ExtentJoinTreeNode.cs
- ImageListStreamer.cs
- ScriptingWebServicesSectionGroup.cs
- StorageEntitySetMapping.cs
- DeploymentSectionCache.cs
- CounterSample.cs
- UniqueID.cs
- EventListenerClientSide.cs
- Int16KeyFrameCollection.cs
- DateTimeValueSerializer.cs
- DeploymentSectionCache.cs
- LightweightCodeGenerator.cs
- HealthMonitoringSectionHelper.cs
- TextStore.cs
- DomNameTable.cs
- HtmlAnchor.cs
- WebPartRestoreVerb.cs
- InfoCardPolicy.cs
- WmiEventSink.cs
- InvokePattern.cs
- ProtectedConfigurationSection.cs
- CheckoutException.cs
- Point.cs
- DispatcherObject.cs
- DataTableClearEvent.cs
- IgnoreFileBuildProvider.cs
- Label.cs
- FileSystemEventArgs.cs
- ObjectToken.cs
- ClusterRegistryConfigurationProvider.cs
- ToolZone.cs
- ExtentCqlBlock.cs
- IntersectQueryOperator.cs
- PingOptions.cs
- SerializationSectionGroup.cs
- SoapElementAttribute.cs
- EntityDataSourceContainerNameItem.cs
- PageContent.cs
- X509Extension.cs
- RTTypeWrapper.cs
- DataSetMappper.cs
- SubMenuStyle.cs
- EventItfInfo.cs
- DataSourceXmlSubItemAttribute.cs
- ScriptHandlerFactory.cs
- DataViewListener.cs
- GeometryModel3D.cs
- SqlBooleanizer.cs
- AccessorTable.cs
- DescendantOverDescendantQuery.cs
- BrowserCapabilitiesCodeGenerator.cs