Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / Script / Services / ScriptHandlerFactory.cs / 1305376 / ScriptHandlerFactory.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Web.SessionState; using System.Security.Permissions; using System.Security; 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(); } [SecuritySafeCritical] 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; using System.Security.Permissions; using System.Security; 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(); } [SecuritySafeCritical] 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
- InputQueue.cs
- X500Name.cs
- DataColumnPropertyDescriptor.cs
- PerfCounterSection.cs
- CipherData.cs
- TextSerializer.cs
- XmlSerializerVersionAttribute.cs
- DbParameterCollectionHelper.cs
- SafeCertificateStore.cs
- TemplatedMailWebEventProvider.cs
- EntityClassGenerator.cs
- BindingGraph.cs
- XmlAnyElementAttributes.cs
- sapiproxy.cs
- ElementMarkupObject.cs
- EntityClassGenerator.cs
- WindowPattern.cs
- DateTimeConverter.cs
- NetworkAddressChange.cs
- PathFigure.cs
- Stroke2.cs
- ResXDataNode.cs
- MappedMetaModel.cs
- ImageBrush.cs
- Environment.cs
- SqlDataSourceSelectingEventArgs.cs
- WindowsFormsHostPropertyMap.cs
- DataGridViewRowPostPaintEventArgs.cs
- SqlFormatter.cs
- PartialCachingControl.cs
- WriteTimeStream.cs
- Transform3D.cs
- SqlUserDefinedTypeAttribute.cs
- WmlLinkAdapter.cs
- ControlBuilderAttribute.cs
- ActiveXMessageFormatter.cs
- DbDataSourceEnumerator.cs
- InstanceKey.cs
- XmlDictionary.cs
- URLAttribute.cs
- KnownIds.cs
- CodeVariableReferenceExpression.cs
- SaveFileDialog.cs
- XmlSerializer.cs
- MenuBase.cs
- WebPartUtil.cs
- OdbcHandle.cs
- Int16AnimationUsingKeyFrames.cs
- safelinkcollection.cs
- UpdatePanel.cs
- ObjectDataSourceDisposingEventArgs.cs
- HostingEnvironmentException.cs
- WindowsListViewSubItem.cs
- DataGridViewCellEventArgs.cs
- CallbackValidator.cs
- EntityFrameworkVersions.cs
- MatrixTransform3D.cs
- SimpleTypesSurrogate.cs
- SiteMapNodeItem.cs
- PixelFormat.cs
- TouchesCapturedWithinProperty.cs
- Rect.cs
- XPathItem.cs
- WriteTimeStream.cs
- ZipFileInfoCollection.cs
- GroupItem.cs
- InputQueueChannelAcceptor.cs
- WriteTimeStream.cs
- SplitterDesigner.cs
- TextWriterTraceListener.cs
- SafeHandles.cs
- TypeTypeConverter.cs
- StackBuilderSink.cs
- TraceXPathNavigator.cs
- RelativeSource.cs
- ProviderSettingsCollection.cs
- Delay.cs
- AssemblyGen.cs
- SqlTypeConverter.cs
- BindUriHelper.cs
- CodeStatementCollection.cs
- EntityType.cs
- HostProtectionException.cs
- FixedSOMPageConstructor.cs
- PropertyEmitter.cs
- PointLight.cs
- XmlSchemaComplexContentRestriction.cs
- DynamicDiscoSearcher.cs
- Merger.cs
- ServicesExceptionNotHandledEventArgs.cs
- DirectoryInfo.cs
- DataGridViewCellMouseEventArgs.cs
- ProgressBarBrushConverter.cs
- TransformDescriptor.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- AuthenticationServiceManager.cs
- UpdateExpressionVisitor.cs
- StandardBindingElement.cs
- IItemProperties.cs
- DataControlField.cs