Code:
/ DotNET / DotNET / 8.0 / untmp / Orcas / RTM / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ColumnCollection.cs
- PagedDataSource.cs
- Environment.cs
- EventLogSession.cs
- HttpWebRequest.cs
- SignedXml.cs
- Size3DConverter.cs
- Documentation.cs
- CompilationPass2Task.cs
- Renderer.cs
- Buffer.cs
- IfElseDesigner.xaml.cs
- ContractType.cs
- XmlSerializableServices.cs
- GetWinFXPath.cs
- Baml2006SchemaContext.cs
- PasswordBoxAutomationPeer.cs
- TemplateComponentConnector.cs
- SaveRecipientRequest.cs
- SqlCommandSet.cs
- Thread.cs
- ServiceOperation.cs
- DbTransaction.cs
- ResourcesBuildProvider.cs
- AdCreatedEventArgs.cs
- AssemblyName.cs
- ActivityMarkupSerializer.cs
- AppSecurityManager.cs
- SqlInternalConnectionSmi.cs
- SchemaImporterExtensionsSection.cs
- BitVector32.cs
- LinqDataSourceStatusEventArgs.cs
- MarginsConverter.cs
- HttpWriter.cs
- OleDbParameterCollection.cs
- UnrecognizedPolicyAssertionElement.cs
- AssemblyUtil.cs
- DefaultBindingPropertyAttribute.cs
- GraphicsState.cs
- ProfilePropertyNameValidator.cs
- RepeaterItem.cs
- PointConverter.cs
- RequestCache.cs
- TimelineGroup.cs
- QueryOptionExpression.cs
- UnmanagedMemoryStream.cs
- Marshal.cs
- HealthMonitoringSectionHelper.cs
- SizeChangedInfo.cs
- SqlGatherProducedAliases.cs
- DataServiceBuildProvider.cs
- COM2ExtendedUITypeEditor.cs
- RemotingConfiguration.cs
- BackStopAuthenticationModule.cs
- QilStrConcatenator.cs
- HtmlContainerControl.cs
- StickyNoteHelper.cs
- PermissionListSet.cs
- XamlVector3DCollectionSerializer.cs
- PersistenceProviderElement.cs
- ComponentSerializationService.cs
- CustomAttribute.cs
- InternalDispatchObject.cs
- InputLangChangeRequestEvent.cs
- ListBindableAttribute.cs
- GeneralTransform3DCollection.cs
- PassportPrincipal.cs
- CultureNotFoundException.cs
- PageHandlerFactory.cs
- Set.cs
- SchemaImporterExtension.cs
- LabelDesigner.cs
- Int32CAMarshaler.cs
- TextBreakpoint.cs
- EntityContainerAssociationSetEnd.cs
- ColorConverter.cs
- FrameworkReadOnlyPropertyMetadata.cs
- EmptyEnumerable.cs
- Color.cs
- ImageFormat.cs
- SimpleTypeResolver.cs
- DataControlFieldCell.cs
- Hash.cs
- MatcherBuilder.cs
- WizardStepBase.cs
- shaperfactoryquerycachekey.cs
- InputScopeNameConverter.cs
- ResourcePermissionBaseEntry.cs
- ISFTagAndGuidCache.cs
- EventLogHandle.cs
- Int64AnimationBase.cs
- sortedlist.cs
- MergeFailedEvent.cs
- NonSerializedAttribute.cs
- SymbolMethod.cs
- RemotingConfigParser.cs
- XmlTypeMapping.cs
- securitymgrsite.cs
- ModifierKeysValueSerializer.cs
- ToolStripDropDownClosedEventArgs.cs