Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DispatcherTimer.cs
- AdornerHitTestResult.cs
- RowUpdatedEventArgs.cs
- NetTcpSecurity.cs
- SystemTcpStatistics.cs
- VersionPair.cs
- CreateParams.cs
- HitTestFilterBehavior.cs
- AuthenticatedStream.cs
- ValidatedControlConverter.cs
- DiagnosticTraceSource.cs
- Journal.cs
- SetStoryboardSpeedRatio.cs
- Point3DCollection.cs
- SetMemberBinder.cs
- SmtpNegotiateAuthenticationModule.cs
- StartUpEventArgs.cs
- UrlPropertyAttribute.cs
- ClientProxyGenerator.cs
- ObjectItemNoOpAssemblyLoader.cs
- ModuleBuilder.cs
- BasePropertyDescriptor.cs
- HostVisual.cs
- SafeBitVector32.cs
- TextChange.cs
- SqlExpander.cs
- BamlResourceContent.cs
- Highlights.cs
- DataPagerFieldCollection.cs
- ServiceMoniker.cs
- TextTabProperties.cs
- UpdatePanelControlTrigger.cs
- ZipFileInfoCollection.cs
- ImageSource.cs
- ScriptResourceHandler.cs
- TableLayoutStyleCollection.cs
- CaseCqlBlock.cs
- InvokeMethodActivityDesigner.cs
- FormatException.cs
- ByteArrayHelperWithString.cs
- BookmarkNameHelper.cs
- HwndMouseInputProvider.cs
- ZeroOpNode.cs
- SessionStateSection.cs
- EntityContainerEntitySet.cs
- QilNode.cs
- EnumMember.cs
- TypeSystemHelpers.cs
- FrameworkElementAutomationPeer.cs
- ParserOptions.cs
- BitmapEffectCollection.cs
- FileLogRecordHeader.cs
- GridViewDeleteEventArgs.cs
- AssemblyResourceLoader.cs
- ChangesetResponse.cs
- SocketException.cs
- MsmqTransportReceiveParameters.cs
- IncomingWebResponseContext.cs
- SafeMILHandle.cs
- SqlParameterCollection.cs
- SoapIgnoreAttribute.cs
- Connector.cs
- Lasso.cs
- OdbcCommandBuilder.cs
- ResXDataNode.cs
- CodePropertyReferenceExpression.cs
- XmlArrayItemAttributes.cs
- ResourceKey.cs
- MatrixValueSerializer.cs
- PolyQuadraticBezierSegment.cs
- RoleService.cs
- DataSourceCache.cs
- X509Certificate.cs
- ObjectConverter.cs
- SoapFormatterSinks.cs
- OdbcDataAdapter.cs
- MarkupCompiler.cs
- TagMapInfo.cs
- ConfigurationValidatorBase.cs
- DSASignatureDeformatter.cs
- TokenFactoryBase.cs
- AggregateNode.cs
- DataGridTextBoxColumn.cs
- DayRenderEvent.cs
- DictionaryBase.cs
- DataGridPagerStyle.cs
- SourceFileInfo.cs
- DropShadowEffect.cs
- NumberSubstitution.cs
- SignatureTargetIdManager.cs
- XPathNodePointer.cs
- DbParameterHelper.cs
- PolicyLevel.cs
- WithParamAction.cs
- DataContractSerializerOperationBehavior.cs
- XmlSerializerAssemblyAttribute.cs
- DataGridCellsPresenter.cs
- QuadraticBezierSegment.cs
- EntryWrittenEventArgs.cs
- BasePattern.cs