Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / System.ServiceModel.Activation / System / ServiceModel / Activation / ServiceRouteHandler.cs / 1305376 / ServiceRouteHandler.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Activation { using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Runtime; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Diagnostics; using System.ServiceModel.Diagnostics.Application; using System.Web; using System.Web.Hosting; using System.Web.Routing; class ServiceRouteHandler : IRouteHandler { string baseAddress; IHttpHandler handler; object locker = new object(); [Fx.Tag.Cache( typeof(ServiceDeploymentInfo), Fx.Tag.CacheAttrition.None, Scope = "instance of declaring class", SizeLimit = "unbounded", Timeout = "infinite" )] static Hashtable routeServiceTable = new Hashtable(StringComparer.CurrentCultureIgnoreCase); public ServiceRouteHandler(string baseAddress, ServiceHostFactoryBase serviceHostFactory, Type webServiceType) { this.baseAddress = string.Format(CultureInfo.CurrentCulture, "~/{0}", baseAddress); if (webServiceType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("webServiceType")); } if (serviceHostFactory == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("serviceHostFactory")); } string serviceType = webServiceType.AssemblyQualifiedName; AddServiceInfo(this.baseAddress, new ServiceDeploymentInfo(this.baseAddress, serviceHostFactory, serviceType)); } public IHttpHandler GetHttpHandler(RequestContext requestContext) { // we create httphandler only we the request map to the corresponding route. // we thus do not need to check whether the baseAddress has been added // even though Asp.Net allows duplicated routes but it picks the first match if (handler == null) { // use local lock to prevent multiple httphanders from being created lock (locker) { if (handler == null) { handler = new AspNetRouteServiceHttpHandler(this.baseAddress); MarkRouteAsActive(this.baseAddress); } } } return handler; } static void AddServiceInfo(string virtualPath, ServiceDeploymentInfo serviceInfo) { Fx.Assert(!string.IsNullOrEmpty(virtualPath), "virtualPath should not be empty or null"); Fx.Assert(serviceInfo != null, "serviceInfo should not be null"); // We cannot support dulicated route routes even Asp.Net route allows it try { routeServiceTable.Add(virtualPath, serviceInfo); } catch (ArgumentException) { throw FxTrace.Exception.Argument("virtualPath", SR.Hosting_RouteHasAlreadyBeenAdded(virtualPath)); } } public static ServiceDeploymentInfo GetServiceInfo(string normalizedVirtualPath) { return (ServiceDeploymentInfo)routeServiceTable[normalizedVirtualPath]; } public static bool IsActiveAspNetRoute(string virtualPath) { bool isRouteService = false; if (!string.IsNullOrEmpty(virtualPath)) { ServiceDeploymentInfo serviceInfo = (ServiceDeploymentInfo)routeServiceTable[virtualPath]; if (serviceInfo != null) { isRouteService = serviceInfo.MessageHandledByRoute; } } return isRouteService; } // A route in routetable does not always mean the route will be picked // we update IsRouteService only when Asp.Net picks this route public static void MarkRouteAsActive(string normalizedVirtualPath) { ServiceDeploymentInfo serviceInfo = (ServiceDeploymentInfo)routeServiceTable[normalizedVirtualPath]; if (serviceInfo != null) { serviceInfo.MessageHandledByRoute = true; } } // a route should be marked as inactive in the case that CBA should be used public static void MarkARouteAsInactive(string normalizedVirtualPath) { ServiceDeploymentInfo serviceInfo = (ServiceDeploymentInfo)routeServiceTable[normalizedVirtualPath]; if (serviceInfo != null) { serviceInfo.MessageHandledByRoute = false; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Activation { using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Runtime; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Diagnostics; using System.ServiceModel.Diagnostics.Application; using System.Web; using System.Web.Hosting; using System.Web.Routing; class ServiceRouteHandler : IRouteHandler { string baseAddress; IHttpHandler handler; object locker = new object(); [Fx.Tag.Cache( typeof(ServiceDeploymentInfo), Fx.Tag.CacheAttrition.None, Scope = "instance of declaring class", SizeLimit = "unbounded", Timeout = "infinite" )] static Hashtable routeServiceTable = new Hashtable(StringComparer.CurrentCultureIgnoreCase); public ServiceRouteHandler(string baseAddress, ServiceHostFactoryBase serviceHostFactory, Type webServiceType) { this.baseAddress = string.Format(CultureInfo.CurrentCulture, "~/{0}", baseAddress); if (webServiceType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("webServiceType")); } if (serviceHostFactory == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("serviceHostFactory")); } string serviceType = webServiceType.AssemblyQualifiedName; AddServiceInfo(this.baseAddress, new ServiceDeploymentInfo(this.baseAddress, serviceHostFactory, serviceType)); } public IHttpHandler GetHttpHandler(RequestContext requestContext) { // we create httphandler only we the request map to the corresponding route. // we thus do not need to check whether the baseAddress has been added // even though Asp.Net allows duplicated routes but it picks the first match if (handler == null) { // use local lock to prevent multiple httphanders from being created lock (locker) { if (handler == null) { handler = new AspNetRouteServiceHttpHandler(this.baseAddress); MarkRouteAsActive(this.baseAddress); } } } return handler; } static void AddServiceInfo(string virtualPath, ServiceDeploymentInfo serviceInfo) { Fx.Assert(!string.IsNullOrEmpty(virtualPath), "virtualPath should not be empty or null"); Fx.Assert(serviceInfo != null, "serviceInfo should not be null"); // We cannot support dulicated route routes even Asp.Net route allows it try { routeServiceTable.Add(virtualPath, serviceInfo); } catch (ArgumentException) { throw FxTrace.Exception.Argument("virtualPath", SR.Hosting_RouteHasAlreadyBeenAdded(virtualPath)); } } public static ServiceDeploymentInfo GetServiceInfo(string normalizedVirtualPath) { return (ServiceDeploymentInfo)routeServiceTable[normalizedVirtualPath]; } public static bool IsActiveAspNetRoute(string virtualPath) { bool isRouteService = false; if (!string.IsNullOrEmpty(virtualPath)) { ServiceDeploymentInfo serviceInfo = (ServiceDeploymentInfo)routeServiceTable[virtualPath]; if (serviceInfo != null) { isRouteService = serviceInfo.MessageHandledByRoute; } } return isRouteService; } // A route in routetable does not always mean the route will be picked // we update IsRouteService only when Asp.Net picks this route public static void MarkRouteAsActive(string normalizedVirtualPath) { ServiceDeploymentInfo serviceInfo = (ServiceDeploymentInfo)routeServiceTable[normalizedVirtualPath]; if (serviceInfo != null) { serviceInfo.MessageHandledByRoute = true; } } // a route should be marked as inactive in the case that CBA should be used public static void MarkARouteAsInactive(string normalizedVirtualPath) { ServiceDeploymentInfo serviceInfo = (ServiceDeploymentInfo)routeServiceTable[normalizedVirtualPath]; if (serviceInfo != null) { serviceInfo.MessageHandledByRoute = false; } } } } // 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
- FormsAuthenticationEventArgs.cs
- CfgRule.cs
- KoreanLunisolarCalendar.cs
- ProfileSettings.cs
- FontSource.cs
- _LoggingObject.cs
- UserUseLicenseDictionaryLoader.cs
- ConnectionPoolManager.cs
- BufferedGraphicsContext.cs
- DbException.cs
- Pair.cs
- DATA_BLOB.cs
- TableCellCollection.cs
- ToolStripMenuItem.cs
- RemoteWebConfigurationHostServer.cs
- MessageEncoderFactory.cs
- ScrollEventArgs.cs
- PrintController.cs
- ParsedAttributeCollection.cs
- DbTransaction.cs
- Token.cs
- ThicknessKeyFrameCollection.cs
- ProfileParameter.cs
- ISFClipboardData.cs
- WebPartZone.cs
- BrowserCapabilitiesFactoryBase.cs
- NextPreviousPagerField.cs
- NativeActivity.cs
- WebRequest.cs
- Renderer.cs
- OleDbCommandBuilder.cs
- WebGetAttribute.cs
- LZCodec.cs
- WebResourceAttribute.cs
- EditCommandColumn.cs
- MemberHolder.cs
- MinimizableAttributeTypeConverter.cs
- _SslSessionsCache.cs
- SystemUdpStatistics.cs
- ContextMarshalException.cs
- OleDbConnection.cs
- ValidationRuleCollection.cs
- DigestTraceRecordHelper.cs
- StateDesignerConnector.cs
- SqlDataSourceWizardForm.cs
- ToolStripStatusLabel.cs
- XmlCodeExporter.cs
- MessagingActivityHelper.cs
- SqlConnectionPoolProviderInfo.cs
- BufferBuilder.cs
- XmlTextWriter.cs
- CellPartitioner.cs
- ConditionalAttribute.cs
- Rotation3DAnimation.cs
- EncodingInfo.cs
- FlowDocumentPage.cs
- SelectionUIService.cs
- StreamGeometry.cs
- mediapermission.cs
- ResourcePool.cs
- SamlSerializer.cs
- ChildChangedEventArgs.cs
- PersonalizationDictionary.cs
- RealProxy.cs
- InlineUIContainer.cs
- ApplicationFileParser.cs
- TableAdapterManagerHelper.cs
- ErrorWebPart.cs
- StatusBarPanelClickEvent.cs
- VolatileEnlistmentMultiplexing.cs
- HttpCapabilitiesEvaluator.cs
- CancellationState.cs
- XPathParser.cs
- EmptyControlCollection.cs
- DataGridViewIntLinkedList.cs
- SendActivityDesignerTheme.cs
- AutomationPattern.cs
- HttpVersion.cs
- SafeFileMapViewHandle.cs
- GroupStyle.cs
- DesignerAdapterUtil.cs
- SystemFonts.cs
- HandleCollector.cs
- ProcessHost.cs
- BlockCollection.cs
- MemberExpression.cs
- ContractBase.cs
- MetadataArtifactLoaderResource.cs
- VisualTreeUtils.cs
- DataSourceControlBuilder.cs
- LinearKeyFrames.cs
- XmlEventCache.cs
- PrintDocument.cs
- SiteMapDataSourceView.cs
- LabelLiteral.cs
- mongolianshape.cs
- FloaterParaClient.cs
- SoapAttributeOverrides.cs
- ListViewItem.cs
- BindingOperations.cs