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
- HttpCachePolicyElement.cs
- FileNotFoundException.cs
- LocalizationParserHooks.cs
- RewritingValidator.cs
- WebPartHeaderCloseVerb.cs
- ThrowHelper.cs
- AssociationTypeEmitter.cs
- FormViewInsertEventArgs.cs
- NameValuePermission.cs
- StyleReferenceConverter.cs
- FixedTextPointer.cs
- XmlUrlEditor.cs
- CultureInfoConverter.cs
- ObjectDataSourceMethodEventArgs.cs
- UnionCodeGroup.cs
- ShapingWorkspace.cs
- FileDialogPermission.cs
- SizeValueSerializer.cs
- BinaryParser.cs
- SQLBoolean.cs
- WpfGeneratedKnownTypes.cs
- TrackingMemoryStream.cs
- SqlMetaData.cs
- ClientBuildManager.cs
- Visual3DCollection.cs
- ListControlDesigner.cs
- ConsoleKeyInfo.cs
- ConfigurationValues.cs
- XmlSchemaNotation.cs
- XmlEncoding.cs
- Wrapper.cs
- ConfigXmlCDataSection.cs
- TreeNodeCollection.cs
- GridViewUpdatedEventArgs.cs
- ProxyWebPartManager.cs
- WindowsFormsHostPropertyMap.cs
- FilteredXmlReader.cs
- XmlEncodedRawTextWriter.cs
- FolderBrowserDialog.cs
- EventDescriptor.cs
- Site.cs
- IsolatedStorageFile.cs
- DropShadowBitmapEffect.cs
- XmlSchemaSearchPattern.cs
- BulletedList.cs
- XmlnsDefinitionAttribute.cs
- Parser.cs
- MulticastDelegate.cs
- MessageSecurityException.cs
- CompoundFileStreamReference.cs
- EntryPointNotFoundException.cs
- ListViewItem.cs
- QuaternionKeyFrameCollection.cs
- mactripleDES.cs
- ObservableDictionary.cs
- DropTarget.cs
- Resources.Designer.cs
- MatrixCamera.cs
- DictionarySectionHandler.cs
- TokenizerHelper.cs
- NativeMsmqMessage.cs
- SafePEFileHandle.cs
- WaitHandle.cs
- InvalidOleVariantTypeException.cs
- OperationContextScope.cs
- ExpressionParser.cs
- InkPresenter.cs
- TextContainerChangeEventArgs.cs
- CharAnimationUsingKeyFrames.cs
- Border.cs
- FlowDocumentPaginator.cs
- WebPartConnectionCollection.cs
- EventLogTraceListener.cs
- SessionIDManager.cs
- Span.cs
- Mapping.cs
- ProtocolsSection.cs
- WebPartCatalogAddVerb.cs
- ServiceThrottle.cs
- DeploymentSectionCache.cs
- DrawingState.cs
- GeneralTransform3DTo2D.cs
- EditingMode.cs
- ObjectQuery.cs
- SpeechSynthesizer.cs
- streamingZipPartStream.cs
- PermissionSetEnumerator.cs
- EmptyQuery.cs
- SystemIPGlobalStatistics.cs
- Visual3D.cs
- BaseAppDomainProtocolHandler.cs
- MethodCallConverter.cs
- WizardForm.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- MulticastNotSupportedException.cs
- SecureStringHasher.cs
- SynchronizedInputAdaptor.cs
- DataBindingCollectionEditor.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- ListViewInsertionMark.cs