Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SemanticValue.cs
- MembershipValidatePasswordEventArgs.cs
- SchemaManager.cs
- WorkflowDesignerColors.cs
- complextypematerializer.cs
- ManipulationCompletedEventArgs.cs
- ScrollBarAutomationPeer.cs
- IISMapPath.cs
- ValueType.cs
- BaseInfoTable.cs
- CodeStatementCollection.cs
- XmlRootAttribute.cs
- PeerObject.cs
- securitycriticaldataClass.cs
- SingleObjectCollection.cs
- EqualityComparer.cs
- DataContractSerializerOperationGenerator.cs
- SiteMapNodeCollection.cs
- InputReport.cs
- safesecurityhelperavalon.cs
- UnsafeNativeMethods.cs
- _NegotiateClient.cs
- ConfigXmlAttribute.cs
- Psha1DerivedKeyGenerator.cs
- XmlEventCache.cs
- NonVisualControlAttribute.cs
- _SafeNetHandles.cs
- TdsRecordBufferSetter.cs
- FtpRequestCacheValidator.cs
- ProfileService.cs
- CustomErrorCollection.cs
- CharacterHit.cs
- NoneExcludedImageIndexConverter.cs
- SerializationException.cs
- XPathNavigator.cs
- GridViewDeleteEventArgs.cs
- ErrorStyle.cs
- SymDocumentType.cs
- PrimitiveXmlSerializers.cs
- XmlCDATASection.cs
- Oid.cs
- ExtendedPropertyDescriptor.cs
- FormatConvertedBitmap.cs
- TransformCollection.cs
- ChangeInterceptorAttribute.cs
- DoubleKeyFrameCollection.cs
- FilteredXmlReader.cs
- XmlResolver.cs
- ListControl.cs
- RowToParametersTransformer.cs
- HashLookup.cs
- Visual.cs
- DispatcherBuilder.cs
- DocumentApplicationState.cs
- HitTestParameters.cs
- DataMisalignedException.cs
- OciEnlistContext.cs
- ContourSegment.cs
- MenuItem.cs
- BindingsSection.cs
- CompareInfo.cs
- ReflectionHelper.cs
- BitmapEffectCollection.cs
- ClickablePoint.cs
- ApplicationServicesHostFactory.cs
- FlowDecisionDesigner.xaml.cs
- dbdatarecord.cs
- COSERVERINFO.cs
- NavigationHelper.cs
- AccessibilityHelperForXpWin2k3.cs
- WorkflowRuntimeService.cs
- PropertyMapper.cs
- ThreadExceptionDialog.cs
- FrameworkTemplate.cs
- Container.cs
- DataGridViewAccessibleObject.cs
- FilterElement.cs
- Monitor.cs
- EastAsianLunisolarCalendar.cs
- MethodSignatureGenerator.cs
- WaitHandle.cs
- CollectionType.cs
- PassportIdentity.cs
- CapiSymmetricAlgorithm.cs
- UnsafeCollabNativeMethods.cs
- Matrix3DValueSerializer.cs
- TreeNodeStyle.cs
- LogLogRecordHeader.cs
- SqlMethodAttribute.cs
- MenuItemStyleCollection.cs
- Resources.Designer.cs
- ColorTransform.cs
- HttpListener.cs
- WindowsFont.cs
- VirtualDirectoryMappingCollection.cs
- SqlBulkCopyColumnMappingCollection.cs
- DragEventArgs.cs
- AdCreatedEventArgs.cs
- ShaderEffect.cs
- PipelineDeploymentState.cs