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
- CaseCqlBlock.cs
- StandardOleMarshalObject.cs
- WebPartExportVerb.cs
- XmlSchemaFacet.cs
- OraclePermission.cs
- Pen.cs
- SimpleTextLine.cs
- XmlQueryType.cs
- PackagePartCollection.cs
- UriParserTemplates.cs
- HandlerElementCollection.cs
- SoapWriter.cs
- ObjectListTitleAttribute.cs
- SqlSelectStatement.cs
- WindowsListBox.cs
- SqlConnectionPoolGroupProviderInfo.cs
- WindowsListView.cs
- _WinHttpWebProxyDataBuilder.cs
- SymDocumentType.cs
- FormCollection.cs
- XamlSerializerUtil.cs
- ServiceHttpModule.cs
- InteropAutomationProvider.cs
- MulticastOption.cs
- Pkcs7Signer.cs
- ProviderException.cs
- Operators.cs
- ProxyWebPartConnectionCollection.cs
- LicenseContext.cs
- DataSourceCache.cs
- LinqDataSourceValidationException.cs
- PhysicalAddress.cs
- RangeValidator.cs
- ListViewItemSelectionChangedEvent.cs
- ParseNumbers.cs
- TraceFilter.cs
- EventRecordWrittenEventArgs.cs
- EnumBuilder.cs
- SmtpSection.cs
- XmlMembersMapping.cs
- StorageSetMapping.cs
- TreeViewHitTestInfo.cs
- StyleCollection.cs
- PrivilegeNotHeldException.cs
- ConsoleTraceListener.cs
- DynamicValidator.cs
- QueryReaderSettings.cs
- HtmlButton.cs
- Point4D.cs
- WebEventCodes.cs
- SqlTypesSchemaImporter.cs
- ChangeNode.cs
- GPPOINT.cs
- FlowLayoutSettings.cs
- ProcessThreadDesigner.cs
- DataBoundLiteralControl.cs
- DataGridToolTip.cs
- FrameworkContentElement.cs
- GeneralTransform3DCollection.cs
- PhysicalOps.cs
- RootAction.cs
- InputProcessorProfilesLoader.cs
- HyperLinkColumn.cs
- Int64Animation.cs
- RadioButton.cs
- SecurityCriticalDataForSet.cs
- COM2ICategorizePropertiesHandler.cs
- XsltQilFactory.cs
- Cell.cs
- WebControlToolBoxItem.cs
- HtmlString.cs
- ResourceSetExpression.cs
- RegexBoyerMoore.cs
- DesignTimeData.cs
- EndpointIdentityConverter.cs
- DiagnosticsConfiguration.cs
- CardSpaceException.cs
- SqlIdentifier.cs
- HttpRequestMessageProperty.cs
- DataGridLinkButton.cs
- StrokeCollection2.cs
- CodePropertyReferenceExpression.cs
- OleDbDataAdapter.cs
- RequiredFieldValidator.cs
- ValidatorUtils.cs
- EntityContainerEmitter.cs
- QilValidationVisitor.cs
- EndpointPerformanceCounters.cs
- IERequestCache.cs
- ExtensionSimplifierMarkupObject.cs
- AutomationPatternInfo.cs
- SessionEndedEventArgs.cs
- MsmqSecureHashAlgorithm.cs
- InternalException.cs
- ObjectDataSourceDisposingEventArgs.cs
- Run.cs
- Processor.cs
- StrokeNodeData.cs
- CodeAccessSecurityEngine.cs
- DetailsViewInsertEventArgs.cs