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
- HMAC.cs
- GeometryModel3D.cs
- TextTreeRootTextBlock.cs
- WorkflowDesignerColors.cs
- OleDragDropHandler.cs
- HashCodeCombiner.cs
- ThreadAbortException.cs
- PolyQuadraticBezierSegment.cs
- NullNotAllowedCollection.cs
- ExtenderControl.cs
- ElasticEase.cs
- CodeMemberField.cs
- TypedOperationInfo.cs
- MorphHelper.cs
- oledbconnectionstring.cs
- BitmapMetadataEnumerator.cs
- DBSqlParserTableCollection.cs
- ReadOnlyDictionary.cs
- NativeObjectSecurity.cs
- BaseValidator.cs
- ClockGroup.cs
- SmiTypedGetterSetter.cs
- UInt64.cs
- RtfFormatStack.cs
- MaskedTextBoxTextEditor.cs
- DynamicUpdateCommand.cs
- PointKeyFrameCollection.cs
- MimeMapping.cs
- XmlSchemaAnyAttribute.cs
- ForwardPositionQuery.cs
- SchemaImporterExtensionElementCollection.cs
- UIElementParaClient.cs
- TrackBarRenderer.cs
- WsiProfilesElement.cs
- CallbackValidatorAttribute.cs
- DefaultValueAttribute.cs
- Automation.cs
- PropertyContainer.cs
- BinaryFormatterSinks.cs
- LoginView.cs
- _NetworkingPerfCounters.cs
- KnownIds.cs
- IERequestCache.cs
- EmptyCollection.cs
- ProxyWebPartConnectionCollection.cs
- LinqDataSourceValidationException.cs
- WindowsMenu.cs
- TreeNodeClickEventArgs.cs
- OperationCanceledException.cs
- ButtonBase.cs
- TransformerInfo.cs
- ApplicationBuildProvider.cs
- ShaderEffect.cs
- DelegatingConfigHost.cs
- MultipartContentParser.cs
- SqlClientWrapperSmiStream.cs
- StorageTypeMapping.cs
- RoleService.cs
- DataGridRelationshipRow.cs
- Wizard.cs
- KnowledgeBase.cs
- OptimisticConcurrencyException.cs
- ExpressionTextBox.xaml.cs
- ConfigLoader.cs
- MemoryPressure.cs
- ToolStripPanelRow.cs
- DataGridViewImageCell.cs
- SQLGuid.cs
- QueryAsyncResult.cs
- MsmqBindingElementBase.cs
- DependencyObjectProvider.cs
- XpsDocument.cs
- XmlHierarchicalDataSourceView.cs
- Rfc2898DeriveBytes.cs
- OperationContextScope.cs
- ShortcutKeysEditor.cs
- BitmapEffectDrawing.cs
- SoapSchemaExporter.cs
- WorkflowNamespace.cs
- entityreference_tresulttype.cs
- Component.cs
- JournalEntry.cs
- Missing.cs
- ListViewTableCell.cs
- COMException.cs
- SafeCertificateStore.cs
- FileUtil.cs
- ItemContainerGenerator.cs
- TextPointer.cs
- SettingsAttributes.cs
- GcHandle.cs
- PlatformCulture.cs
- XslTransformFileEditor.cs
- mediaeventargs.cs
- LinqDataView.cs
- ProfilePropertyNameValidator.cs
- OlePropertyStructs.cs
- CodeTypeReferenceCollection.cs
- DBConcurrencyException.cs
- WindowsClientElement.cs