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
- QueryContinueDragEventArgs.cs
- Image.cs
- FormsAuthenticationEventArgs.cs
- QueryAsyncResult.cs
- FunctionCommandText.cs
- PreviewKeyDownEventArgs.cs
- QuestionEventArgs.cs
- StylusTip.cs
- OdbcErrorCollection.cs
- ContextProperty.cs
- AppDomainProtocolHandler.cs
- DrawingContextDrawingContextWalker.cs
- Utilities.cs
- CollaborationHelperFunctions.cs
- ScriptControlManager.cs
- COAUTHINFO.cs
- XsltFunctions.cs
- SqlXmlStorage.cs
- PersonalizationStateQuery.cs
- filewebrequest.cs
- InputLanguageProfileNotifySink.cs
- _ContextAwareResult.cs
- IProvider.cs
- CountdownEvent.cs
- WindowsGraphics2.cs
- Filter.cs
- GeometryModel3D.cs
- ProtocolsSection.cs
- Compilation.cs
- BCryptHashAlgorithm.cs
- PointAnimationUsingPath.cs
- LiteralTextParser.cs
- CryptoConfig.cs
- TreeViewCancelEvent.cs
- MailMessageEventArgs.cs
- MachineSettingsSection.cs
- GeneralTransform3DTo2D.cs
- CodeRemoveEventStatement.cs
- DotExpr.cs
- AsyncDataRequest.cs
- Comparer.cs
- BitmapData.cs
- CheckBox.cs
- ConfigurationStrings.cs
- BindingFormattingDialog.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- DataConnectionHelper.cs
- DataStreamFromComStream.cs
- XomlSerializationHelpers.cs
- WebPart.cs
- CodeMethodInvokeExpression.cs
- InternalMappingException.cs
- MemberJoinTreeNode.cs
- DictionaryGlobals.cs
- GeneralTransform3D.cs
- ClientFormsAuthenticationMembershipProvider.cs
- DeviceSpecificDesigner.cs
- ParseChildrenAsPropertiesAttribute.cs
- UnaryNode.cs
- AttributeAction.cs
- FileSystemInfo.cs
- SoapSchemaMember.cs
- IdentitySection.cs
- FlowDocumentPage.cs
- RuleConditionDialog.cs
- WorkflowServiceNamespace.cs
- RenderCapability.cs
- CodeAttributeDeclarationCollection.cs
- QueueSurrogate.cs
- CapabilitiesPattern.cs
- CustomCategoryAttribute.cs
- FixedElement.cs
- ParserOptions.cs
- WindowsUpDown.cs
- FlowLayoutSettings.cs
- SmiConnection.cs
- SecurityTokenValidationException.cs
- NameTable.cs
- AuthorizationSection.cs
- QilSortKey.cs
- ProcessModelSection.cs
- UnsafeNativeMethods.cs
- DataGridViewComboBoxCell.cs
- FontCollection.cs
- ExpandCollapsePattern.cs
- DataProtectionSecurityStateEncoder.cs
- PropertyValidationContext.cs
- ProfileEventArgs.cs
- XpsSerializationException.cs
- SqlTopReducer.cs
- PropertyRecord.cs
- SafeIUnknown.cs
- RotateTransform3D.cs
- ContainerParaClient.cs
- ListBindingHelper.cs
- ControlDesigner.cs
- SqlUtil.cs
- Win32PrintDialog.cs
- ToolStripItemRenderEventArgs.cs
- AppDomainShutdownMonitor.cs