Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / Script / Services / ScriptHandlerFactory.cs / 1305376 / ScriptHandlerFactory.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using System.Web.SessionState;
using System.Security.Permissions;
using System.Security;
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();
}
[SecuritySafeCritical]
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
- MenuScrollingVisibilityConverter.cs
- StringUtil.cs
- XmlAggregates.cs
- documentsequencetextpointer.cs
- BindingExpression.cs
- XamlReaderConstants.cs
- ParserContext.cs
- MarkerProperties.cs
- TypeSystem.cs
- CodeEntryPointMethod.cs
- UIInitializationException.cs
- ParserStreamGeometryContext.cs
- HitTestWithPointDrawingContextWalker.cs
- ApplicationSecurityManager.cs
- MdImport.cs
- DataGridViewRowsAddedEventArgs.cs
- CodeBlockBuilder.cs
- TransformerConfigurationWizardBase.cs
- GetWinFXPath.cs
- CodeGeneratorOptions.cs
- DropDownHolder.cs
- _WebProxyDataBuilder.cs
- AndCondition.cs
- CompoundFileStorageReference.cs
- BitmapMetadataBlob.cs
- InkPresenterAutomationPeer.cs
- ObjectViewFactory.cs
- TextTreeTextElementNode.cs
- XmlDataSourceNodeDescriptor.cs
- DataReaderContainer.cs
- XDRSchema.cs
- CloseCryptoHandleRequest.cs
- SendMessageChannelCache.cs
- DocobjHost.cs
- DataListItemEventArgs.cs
- ListMarkerLine.cs
- Size3D.cs
- ToolStripStatusLabel.cs
- SecurityElement.cs
- PaginationProgressEventArgs.cs
- FixedSOMGroup.cs
- FileSystemEnumerable.cs
- ConfigurationSection.cs
- RowToParametersTransformer.cs
- InputLanguage.cs
- WebPartManager.cs
- DetailsViewModeEventArgs.cs
- NamedObject.cs
- AlignmentYValidation.cs
- HtmlTernaryTree.cs
- MessageQueueException.cs
- FontConverter.cs
- OrderablePartitioner.cs
- Model3DGroup.cs
- AuthenticationManager.cs
- ResourcePermissionBase.cs
- _AutoWebProxyScriptWrapper.cs
- ImageMap.cs
- SchemaTableColumn.cs
- GenericXmlSecurityToken.cs
- FixUpCollection.cs
- ButtonStandardAdapter.cs
- UnsafeNetInfoNativeMethods.cs
- ResourceDefaultValueAttribute.cs
- UrlMapping.cs
- SafeBitVector32.cs
- InstanceCreationEditor.cs
- XPathParser.cs
- FusionWrap.cs
- NavigationProperty.cs
- Accessors.cs
- FlowLayout.cs
- Point.cs
- SettingsPropertyWrongTypeException.cs
- Metafile.cs
- SoapAttributes.cs
- InstanceStore.cs
- SafeMarshalContext.cs
- XPathDocumentIterator.cs
- ReadOnlyDictionary.cs
- FillBehavior.cs
- SlotInfo.cs
- ChangeNode.cs
- CallbackHandler.cs
- BitmapFrameEncode.cs
- DictionaryCustomTypeDescriptor.cs
- Stack.cs
- SHA1Managed.cs
- MenuItemStyleCollection.cs
- IdentityHolder.cs
- DateTimeConstantAttribute.cs
- MetadataHelper.cs
- BinHexEncoder.cs
- RemotingSurrogateSelector.cs
- ComboBox.cs
- CodeConstructor.cs
- KeyedHashAlgorithm.cs
- RuleElement.cs
- Win32MouseDevice.cs
- LinkLabelLinkClickedEvent.cs