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
- ExternalDataExchangeService.cs
- ObservableCollection.cs
- OdbcEnvironmentHandle.cs
- namescope.cs
- XslCompiledTransform.cs
- DBCSCodePageEncoding.cs
- PeerInvitationResponse.cs
- DataControlFieldHeaderCell.cs
- CacheDependency.cs
- ControlPaint.cs
- IIS7WorkerRequest.cs
- ExecutionEngineException.cs
- _ConnectionGroup.cs
- XmlAnyElementAttribute.cs
- HttpCachePolicy.cs
- CompleteWizardStep.cs
- ViewEvent.cs
- XamlTypeMapper.cs
- CalendarDay.cs
- DeleteMemberBinder.cs
- ServiceOperation.cs
- ChannelSettingsElement.cs
- TextMarkerSource.cs
- Point3D.cs
- XmlDataSourceDesigner.cs
- HttpCachePolicyElement.cs
- MethodRental.cs
- AsymmetricAlgorithm.cs
- UriParserTemplates.cs
- MemberMaps.cs
- SqlFactory.cs
- XXXInfos.cs
- DetailsViewModeEventArgs.cs
- MetadataCache.cs
- ColorConvertedBitmapExtension.cs
- IntranetCredentialPolicy.cs
- BeginEvent.cs
- NameNode.cs
- CodeExpressionCollection.cs
- MimeXmlImporter.cs
- LineMetrics.cs
- Trace.cs
- MachineKeySection.cs
- MostlySingletonList.cs
- TextEffectCollection.cs
- securitycriticaldataClass.cs
- DataSourceExpressionCollection.cs
- StylusTouchDevice.cs
- Select.cs
- OrderedDictionaryStateHelper.cs
- TextPatternIdentifiers.cs
- Parameter.cs
- AddingNewEventArgs.cs
- AspNetHostingPermission.cs
- JsonReaderWriterFactory.cs
- ClaimTypeElementCollection.cs
- ProjectionCamera.cs
- SessionState.cs
- PresentationTraceSources.cs
- ZipFileInfo.cs
- WebPartEditorCancelVerb.cs
- SafeNativeMemoryHandle.cs
- TransportSecurityProtocol.cs
- TransactionScopeDesigner.cs
- ListControl.cs
- TextTreeNode.cs
- objectresult_tresulttype.cs
- GridViewCommandEventArgs.cs
- Normalization.cs
- UpdateInfo.cs
- XmlStreamNodeWriter.cs
- SyntaxCheck.cs
- ConfigXmlText.cs
- RequestCachePolicyConverter.cs
- DependencyObjectProvider.cs
- Boolean.cs
- SymbolPair.cs
- SelectionRange.cs
- NumericUpDown.cs
- XmlReflectionImporter.cs
- FrameDimension.cs
- InheritanceRules.cs
- UserControlDocumentDesigner.cs
- SqlProviderUtilities.cs
- RenameRuleObjectDialog.Designer.cs
- HttpChannelFactory.cs
- PageAsyncTaskManager.cs
- ToolTipAutomationPeer.cs
- Scheduler.cs
- PenThreadWorker.cs
- AttributeUsageAttribute.cs
- PageTheme.cs
- HttpPostedFile.cs
- ObjectTypeMapping.cs
- SafeRegistryHandle.cs
- MailSettingsSection.cs
- WinEventHandler.cs
- CTreeGenerator.cs
- WebScriptServiceHostFactory.cs
- LinkLabelLinkClickedEvent.cs