Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Baml2006ReaderFrame.cs
- ErrorEventArgs.cs
- WorkflowExecutor.cs
- SqlCommandBuilder.cs
- InkCanvasSelection.cs
- TreeWalker.cs
- CompositeActivityMarkupSerializer.cs
- HttpModuleCollection.cs
- BaseUriHelper.cs
- XslNumber.cs
- XmlNodeComparer.cs
- XmlNamespaceDeclarationsAttribute.cs
- CompressedStack.cs
- Image.cs
- TraceSection.cs
- Stacktrace.cs
- CodeExpressionCollection.cs
- DataServiceRequestArgs.cs
- ContractListAdapter.cs
- KeyedPriorityQueue.cs
- remotingproxy.cs
- ClientUrlResolverWrapper.cs
- Perspective.cs
- MonthChangedEventArgs.cs
- HtmlTableCell.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- TreeNodeMouseHoverEvent.cs
- SelectedGridItemChangedEvent.cs
- RC2.cs
- BamlBinaryWriter.cs
- SqlBinder.cs
- XmlLoader.cs
- SaveCardRequest.cs
- TraversalRequest.cs
- BrowserCapabilitiesCodeGenerator.cs
- ActivityWithResultValueSerializer.cs
- ActionFrame.cs
- MarkupExtensionParser.cs
- PopupRootAutomationPeer.cs
- XmlNamespaceMapping.cs
- NamespaceTable.cs
- KeyboardDevice.cs
- HttpListenerRequest.cs
- FixedSOMTableRow.cs
- WindowsScrollBar.cs
- MLangCodePageEncoding.cs
- RoutedEventValueSerializer.cs
- ConnectionPointCookie.cs
- TextReader.cs
- StateBag.cs
- ExtendedPropertyDescriptor.cs
- UICuesEvent.cs
- PrinterResolution.cs
- QueueProcessor.cs
- StorageFunctionMapping.cs
- DataGridViewCellStateChangedEventArgs.cs
- DataGridViewColumnCollectionEditor.cs
- OverflowException.cs
- LineInfo.cs
- Math.cs
- EmptyStringExpandableObjectConverter.cs
- SerializerProvider.cs
- StaticExtensionConverter.cs
- HttpCacheParams.cs
- SID.cs
- XamlInterfaces.cs
- MdiWindowListStrip.cs
- PrintDialogDesigner.cs
- PathSegmentCollection.cs
- ListChangedEventArgs.cs
- TextWriterTraceListener.cs
- NativeMethods.cs
- StickyNoteHelper.cs
- IgnoreDeviceFilterElement.cs
- ElementMarkupObject.cs
- TextEditorTyping.cs
- MultilineStringEditor.cs
- SQLInt32.cs
- BitmapSource.cs
- While.cs
- VirtualPath.cs
- GB18030Encoding.cs
- Marshal.cs
- ConstrainedGroup.cs
- CardSpaceShim.cs
- AdornerPresentationContext.cs
- CommandHelpers.cs
- PersistenceTypeAttribute.cs
- FontSource.cs
- KeyConverter.cs
- WebRequestModuleElementCollection.cs
- PrtTicket_Public_Simple.cs
- DataControlFieldHeaderCell.cs
- NullableBoolConverter.cs
- TraceXPathNavigator.cs
- _UriTypeConverter.cs
- EpmSourcePathSegment.cs
- XpsSerializationException.cs
- ColorConverter.cs
- DbReferenceCollection.cs