Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / System.ServiceModel.Activation / System / ServiceModel / Activation / ApplyHostConfigurationBehavior.cs / 1305376 / ApplyHostConfigurationBehavior.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Collections.Generic; using System.Collections.ObjectModel; using System.ServiceModel; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; //This is the behavior is intended to auto apply IIS/AspNet configuration to WCF post design time class ApplyHostConfigurationBehavior : IServiceBehavior { internal ApplyHostConfigurationBehavior() { } void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase service) { if (service.Description.Endpoints != null && ServiceHostingEnvironment.MultipleSiteBindingsEnabled) { FailActivationIfEndpointsHaveAbsoluteAddress(service); } } void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase service, Collectionendpoints, BindingParameterCollection parameters) { } void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase service) { if (ServiceHostingEnvironment.MultipleSiteBindingsEnabled) { SetEndpointAddressFilterToIgnorePort(service); } } void SetEndpointAddressFilterToIgnorePort(ServiceHostBase service) { for (int i = 0; i < service.ChannelDispatchers.Count; i++) { ChannelDispatcher channelDispatcher = service.ChannelDispatchers[i] as ChannelDispatcher; if (channelDispatcher != null) { if (IsSchemeHttpOrHttps(channelDispatcher.Listener.Uri.Scheme)) { for (int j = 0; j < channelDispatcher.Endpoints.Count; j++) { EndpointDispatcher endpointDispatcher = channelDispatcher.Endpoints[j]; EndpointAddressMessageFilter endpointAddressMessageFilter = endpointDispatcher.AddressFilter as EndpointAddressMessageFilter; if (endpointAddressMessageFilter != null) { endpointAddressMessageFilter.ComparePort = false; } } } } } } void FailActivationIfEndpointsHaveAbsoluteAddress(ServiceHostBase service) { foreach (ServiceEndpoint endpoint in service.Description.Endpoints) { if (IsSchemeHttpOrHttps(endpoint.Binding.Scheme)) { if (endpoint.UnresolvedListenUri != null) { ThrowIfAbsolute(endpoint.UnresolvedListenUri); } else { //If the listen URI is not null, we shouldn't care about address. Because there are //customers who have following config (for load balancer scenarios) - Note ExtraFolder and https //listen URI - http://localhost/App1/x.svc //Address - https://externalhost/ExtranFolder/App1/x.svc ThrowIfAbsolute(endpoint.UnresolvedAddress); } } } ServiceDebugBehavior debugBehavior = service.Description.Behaviors.Find (); if (debugBehavior != null) { if (debugBehavior.HttpHelpPageEnabled) { ThrowIfAbsolute(debugBehavior.HttpHelpPageUrl); } if (debugBehavior.HttpsHelpPageEnabled) { ThrowIfAbsolute(debugBehavior.HttpsHelpPageUrl); } } ServiceMetadataBehavior metadataBehavior = service.Description.Behaviors.Find (); if (metadataBehavior != null) { if (metadataBehavior.HttpGetEnabled) { ThrowIfAbsolute(metadataBehavior.HttpGetUrl); } if (metadataBehavior.HttpsGetEnabled) { ThrowIfAbsolute(metadataBehavior.HttpsGetUrl); } } } static void ThrowIfAbsolute(Uri uri) { if (uri != null && uri.IsAbsoluteUri) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.Hosting_SharedEndpointRequiresRelativeEndpoint(uri.ToString()))); } } static bool IsSchemeHttpOrHttps(string scheme) { return string.Compare(scheme, Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(scheme, Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase) == 0; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Collections.Generic; using System.Collections.ObjectModel; using System.ServiceModel; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; //This is the behavior is intended to auto apply IIS/AspNet configuration to WCF post design time class ApplyHostConfigurationBehavior : IServiceBehavior { internal ApplyHostConfigurationBehavior() { } void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase service) { if (service.Description.Endpoints != null && ServiceHostingEnvironment.MultipleSiteBindingsEnabled) { FailActivationIfEndpointsHaveAbsoluteAddress(service); } } void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase service, Collection endpoints, BindingParameterCollection parameters) { } void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase service) { if (ServiceHostingEnvironment.MultipleSiteBindingsEnabled) { SetEndpointAddressFilterToIgnorePort(service); } } void SetEndpointAddressFilterToIgnorePort(ServiceHostBase service) { for (int i = 0; i < service.ChannelDispatchers.Count; i++) { ChannelDispatcher channelDispatcher = service.ChannelDispatchers[i] as ChannelDispatcher; if (channelDispatcher != null) { if (IsSchemeHttpOrHttps(channelDispatcher.Listener.Uri.Scheme)) { for (int j = 0; j < channelDispatcher.Endpoints.Count; j++) { EndpointDispatcher endpointDispatcher = channelDispatcher.Endpoints[j]; EndpointAddressMessageFilter endpointAddressMessageFilter = endpointDispatcher.AddressFilter as EndpointAddressMessageFilter; if (endpointAddressMessageFilter != null) { endpointAddressMessageFilter.ComparePort = false; } } } } } } void FailActivationIfEndpointsHaveAbsoluteAddress(ServiceHostBase service) { foreach (ServiceEndpoint endpoint in service.Description.Endpoints) { if (IsSchemeHttpOrHttps(endpoint.Binding.Scheme)) { if (endpoint.UnresolvedListenUri != null) { ThrowIfAbsolute(endpoint.UnresolvedListenUri); } else { //If the listen URI is not null, we shouldn't care about address. Because there are //customers who have following config (for load balancer scenarios) - Note ExtraFolder and https //listen URI - http://localhost/App1/x.svc //Address - https://externalhost/ExtranFolder/App1/x.svc ThrowIfAbsolute(endpoint.UnresolvedAddress); } } } ServiceDebugBehavior debugBehavior = service.Description.Behaviors.Find (); if (debugBehavior != null) { if (debugBehavior.HttpHelpPageEnabled) { ThrowIfAbsolute(debugBehavior.HttpHelpPageUrl); } if (debugBehavior.HttpsHelpPageEnabled) { ThrowIfAbsolute(debugBehavior.HttpsHelpPageUrl); } } ServiceMetadataBehavior metadataBehavior = service.Description.Behaviors.Find (); if (metadataBehavior != null) { if (metadataBehavior.HttpGetEnabled) { ThrowIfAbsolute(metadataBehavior.HttpGetUrl); } if (metadataBehavior.HttpsGetEnabled) { ThrowIfAbsolute(metadataBehavior.HttpsGetUrl); } } } static void ThrowIfAbsolute(Uri uri) { if (uri != null && uri.IsAbsoluteUri) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.Hosting_SharedEndpointRequiresRelativeEndpoint(uri.ToString()))); } } static bool IsSchemeHttpOrHttps(string scheme) { return string.Compare(scheme, Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(scheme, Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase) == 0; } } } // 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
- DataGridViewToolTip.cs
- Serializer.cs
- TransformerTypeCollection.cs
- BoolExpressionVisitors.cs
- MouseEvent.cs
- WindowsProgressbar.cs
- OrderByBuilder.cs
- SimpleTextLine.cs
- SafeRightsManagementSessionHandle.cs
- HopperCache.cs
- ThreadExceptionDialog.cs
- NoResizeSelectionBorderGlyph.cs
- RC2CryptoServiceProvider.cs
- ColumnTypeConverter.cs
- TripleDES.cs
- SerializerDescriptor.cs
- FormsAuthenticationUser.cs
- ProtocolsConfiguration.cs
- MarkupProperty.cs
- DocumentPageTextView.cs
- FilterEventArgs.cs
- ConfigurationManagerInternal.cs
- XmlArrayAttribute.cs
- ComplexBindingPropertiesAttribute.cs
- Substitution.cs
- RuntimeCompatibilityAttribute.cs
- Separator.cs
- WorkflowMarkupSerializer.cs
- WebPartTransformerCollection.cs
- UserControlBuildProvider.cs
- DataIdProcessor.cs
- MulticastNotSupportedException.cs
- FormatConvertedBitmap.cs
- AmbientLight.cs
- ListenerElementsCollection.cs
- SystemUdpStatistics.cs
- ScrollContentPresenter.cs
- Track.cs
- WebEvents.cs
- SystemIPGlobalStatistics.cs
- XmlCharCheckingReader.cs
- PrefixQName.cs
- MeshGeometry3D.cs
- GridViewSortEventArgs.cs
- XPathNavigatorReader.cs
- DbMetaDataCollectionNames.cs
- InheritanceContextChangedEventManager.cs
- Line.cs
- RIPEMD160.cs
- X509UI.cs
- ValidatorCompatibilityHelper.cs
- DesignOnlyAttribute.cs
- EventMappingSettings.cs
- EventArgs.cs
- DesignerActionTextItem.cs
- CollectionEditVerbManager.cs
- DataServiceKeyAttribute.cs
- MenuStrip.cs
- TouchEventArgs.cs
- SpellerInterop.cs
- AuthenticationSchemesHelper.cs
- ChildTable.cs
- WindowsEditBoxRange.cs
- ClearTypeHintValidation.cs
- XamlPoint3DCollectionSerializer.cs
- CodeTypeDeclarationCollection.cs
- SystemFonts.cs
- ComponentEvent.cs
- ContextMenu.cs
- EnumConverter.cs
- ExcCanonicalXml.cs
- HttpWriter.cs
- XmlResolver.cs
- WindowsFormsSectionHandler.cs
- RenderingEventArgs.cs
- SBCSCodePageEncoding.cs
- ServiceRouteHandler.cs
- RootProfilePropertySettingsCollection.cs
- CqlGenerator.cs
- PublisherMembershipCondition.cs
- CompositeTypefaceMetrics.cs
- EntityDataSourceViewSchema.cs
- HttpListener.cs
- UpdateCommand.cs
- ReferencedType.cs
- AttachedPropertyBrowsableAttribute.cs
- XamlStream.cs
- DesignerDataConnection.cs
- SmiEventSink.cs
- BufferModeSettings.cs
- TextEditorCharacters.cs
- SoapDocumentMethodAttribute.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- ReflectionUtil.cs
- XmlAtomErrorReader.cs
- UriParserTemplates.cs
- WorkflowMarkupSerializerMapping.cs
- DataSetUtil.cs
- Root.cs
- SBCSCodePageEncoding.cs