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
- CheckedListBox.cs
- IPHostEntry.cs
- OdbcConnectionOpen.cs
- MLangCodePageEncoding.cs
- SHA256Managed.cs
- DataGridViewCellCancelEventArgs.cs
- EllipseGeometry.cs
- CallContext.cs
- PageCatalogPart.cs
- ActivityWithResult.cs
- GregorianCalendar.cs
- Transform3DGroup.cs
- CompareValidator.cs
- SqlInternalConnectionTds.cs
- ContainerVisual.cs
- TraceContextEventArgs.cs
- ArrayListCollectionBase.cs
- SurrogateSelector.cs
- ListParagraph.cs
- OracleMonthSpan.cs
- unitconverter.cs
- VirtualizingPanel.cs
- HttpConfigurationContext.cs
- ShaderRenderModeValidation.cs
- CodeDelegateInvokeExpression.cs
- ParameterInfo.cs
- SafeThreadHandle.cs
- MsmqIntegrationElement.cs
- PrincipalPermissionMode.cs
- EditorZone.cs
- StylusButtonCollection.cs
- UrlSyndicationContent.cs
- MatrixTransform.cs
- Int64.cs
- UriParserTemplates.cs
- OutputCacheProfile.cs
- XmlSerializer.cs
- securitycriticaldataClass.cs
- Propagator.cs
- CompilationSection.cs
- Operators.cs
- BaseTemplateParser.cs
- AxParameterData.cs
- OdbcReferenceCollection.cs
- TabPage.cs
- HtmlDocument.cs
- IxmlLineInfo.cs
- DriveNotFoundException.cs
- VersionPair.cs
- ClientOptions.cs
- Application.cs
- SecurityContext.cs
- WmlCommandAdapter.cs
- TemplatePagerField.cs
- Viewport2DVisual3D.cs
- StateInitializationDesigner.cs
- EmptyEnumerable.cs
- ScriptServiceAttribute.cs
- SqlDataSourceView.cs
- ScriptRegistrationManager.cs
- BaseCodePageEncoding.cs
- SqlVisitor.cs
- DragDeltaEventArgs.cs
- RuleRef.cs
- XmlElementList.cs
- Boolean.cs
- Button.cs
- WindowsFormsHelpers.cs
- GuidelineSet.cs
- ModifierKeysConverter.cs
- TextTreeInsertElementUndoUnit.cs
- TextRangeEdit.cs
- PtsHelper.cs
- XmlHierarchicalDataSourceView.cs
- ReturnValue.cs
- StyleCollection.cs
- ManagementOperationWatcher.cs
- HtmlInputReset.cs
- JsonGlobals.cs
- RevocationPoint.cs
- TextTreeTextNode.cs
- XNodeNavigator.cs
- DateTimePicker.cs
- NamespaceList.cs
- xmlfixedPageInfo.cs
- DataBindingValueUIHandler.cs
- BuildTopDownAttribute.cs
- PageParserFilter.cs
- OdbcCommand.cs
- HyperLinkStyle.cs
- KeyedHashAlgorithm.cs
- TextPatternIdentifiers.cs
- LayoutExceptionEventArgs.cs
- SafeFileMappingHandle.cs
- DelegatingTypeDescriptionProvider.cs
- AbsoluteQuery.cs
- DecoderFallback.cs
- GroupItemAutomationPeer.cs
- XmlChildNodes.cs
- DesignTimeDataBinding.cs