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
- ProtocolsConfigurationEntry.cs
- EngineSite.cs
- WinEventHandler.cs
- SqlDelegatedTransaction.cs
- HybridCollection.cs
- HostedBindingBehavior.cs
- WebBrowserUriTypeConverter.cs
- WebPartEditorCancelVerb.cs
- Scheduler.cs
- ProgressBarRenderer.cs
- WindowsToolbarAsMenu.cs
- TypeHelpers.cs
- XmlSchemaSimpleTypeRestriction.cs
- ClientBuildManager.cs
- DtrList.cs
- CodeCompileUnit.cs
- PublisherIdentityPermission.cs
- Message.cs
- MessageEncoder.cs
- UInt16Storage.cs
- Pair.cs
- RegionData.cs
- ConfigurationLoader.cs
- Preprocessor.cs
- HttpFileCollectionBase.cs
- AudioException.cs
- HwndMouseInputProvider.cs
- CodeParameterDeclarationExpression.cs
- QilReplaceVisitor.cs
- SqlLiftIndependentRowExpressions.cs
- BuildProvidersCompiler.cs
- QuaternionValueSerializer.cs
- WindowInteractionStateTracker.cs
- Stylesheet.cs
- SafeFindHandle.cs
- ComboBox.cs
- OciLobLocator.cs
- TextLineResult.cs
- DataServiceOperationContext.cs
- SHA1.cs
- InitializeCorrelation.cs
- ArithmeticException.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- ChannelRequirements.cs
- unsafeIndexingFilterStream.cs
- SqlProfileProvider.cs
- MenuBase.cs
- CapabilitiesAssignment.cs
- TextCollapsingProperties.cs
- DateTimeOffsetAdapter.cs
- DataIdProcessor.cs
- ScrollViewer.cs
- AppearanceEditorPart.cs
- TemplateBamlRecordReader.cs
- MetadataPropertyCollection.cs
- MobileUserControlDesigner.cs
- FontWeights.cs
- CodeCommentStatement.cs
- RNGCryptoServiceProvider.cs
- StringUtil.cs
- ParseHttpDate.cs
- NotifyInputEventArgs.cs
- FillRuleValidation.cs
- NativeObjectSecurity.cs
- DisableDpiAwarenessAttribute.cs
- WebSysDisplayNameAttribute.cs
- hwndwrapper.cs
- EntityDataSourceDesigner.cs
- BamlBinaryReader.cs
- _SpnDictionary.cs
- ProfilePropertyNameValidator.cs
- UnicodeEncoding.cs
- ObjectHelper.cs
- AssertSection.cs
- PageTrueTypeFont.cs
- DBDataPermission.cs
- SessionState.cs
- WsdlImporterElementCollection.cs
- HandlerFactoryCache.cs
- PropertyDescriptorComparer.cs
- SmiRecordBuffer.cs
- PathFigureCollection.cs
- WebBrowserPermission.cs
- RadioButton.cs
- ReadContentAsBinaryHelper.cs
- DataGridViewTextBoxCell.cs
- WebHttpBehavior.cs
- SqlComparer.cs
- TemplateControlCodeDomTreeGenerator.cs
- ScriptingSectionGroup.cs
- WindowsGraphicsCacheManager.cs
- ListViewCancelEventArgs.cs
- XmlSchemaAny.cs
- SerializationStore.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- ToolStripManager.cs
- ServiceNotStartedException.cs
- ExpandCollapsePattern.cs
- Identity.cs
- DispatcherHooks.cs