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
- ProviderException.cs
- MethodCallConverter.cs
- NonParentingControl.cs
- Pen.cs
- ScriptManagerProxy.cs
- IndexedGlyphRun.cs
- NegatedCellConstant.cs
- CodeTypeDeclaration.cs
- GatewayIPAddressInformationCollection.cs
- SID.cs
- ConnectionPool.cs
- WindowsSlider.cs
- DynamicResourceExtension.cs
- DesignerSelectionListAdapter.cs
- Dynamic.cs
- HelpProvider.cs
- ScriptRef.cs
- FaultDesigner.cs
- ConfigurationStrings.cs
- SQLGuid.cs
- DockingAttribute.cs
- XmlSchemaChoice.cs
- SafeFileHandle.cs
- SoapSchemaExporter.cs
- TextClipboardData.cs
- PinProtectionHelper.cs
- MaxMessageSizeStream.cs
- WebBrowserNavigatingEventHandler.cs
- DynamicDataRouteHandler.cs
- PkcsUtils.cs
- DataGridViewRow.cs
- BaseUriHelper.cs
- PenLineJoinValidation.cs
- BindValidationContext.cs
- XmlSerializableWriter.cs
- DrawListViewItemEventArgs.cs
- BasicDesignerLoader.cs
- TextClipboardData.cs
- ScriptMethodAttribute.cs
- SpanIndex.cs
- PropertyDescriptorComparer.cs
- SQLDecimal.cs
- Task.cs
- DurableOperationAttribute.cs
- CompModSwitches.cs
- XamlBuildProvider.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- WindowsGraphicsCacheManager.cs
- Vector3dCollection.cs
- TextBoxBase.cs
- DispatcherExceptionEventArgs.cs
- Rotation3DAnimationBase.cs
- UnsafeNativeMethods.cs
- FileDialog.cs
- WindowsFormsHostAutomationPeer.cs
- SHA1Managed.cs
- DataGridViewLinkColumn.cs
- OutputWindow.cs
- SafeFindHandle.cs
- ParameterReplacerVisitor.cs
- ExpandCollapseProviderWrapper.cs
- SQLSingle.cs
- GlobalizationAssembly.cs
- ToolStripControlHost.cs
- ToolBarOverflowPanel.cs
- ArraySet.cs
- UICuesEvent.cs
- ExpressionCopier.cs
- Rule.cs
- DataGridViewCellStyleEditor.cs
- FontClient.cs
- SymLanguageVendor.cs
- RealizationContext.cs
- ErrorStyle.cs
- FixedPage.cs
- FontCacheUtil.cs
- AddInToken.cs
- DataServiceRequestException.cs
- FontUnitConverter.cs
- MULTI_QI.cs
- SymbolTable.cs
- HttpServerProtocol.cs
- DefinitionBase.cs
- ServiceHttpModule.cs
- ArcSegment.cs
- RtfFormatStack.cs
- ConsumerConnectionPointCollection.cs
- assertwrapper.cs
- XmlFormatExtensionAttribute.cs
- WaitHandle.cs
- TextServicesHost.cs
- ProcessModelSection.cs
- LabelEditEvent.cs
- WindowsListViewScroll.cs
- ImpersonateTokenRef.cs
- HttpServerVarsCollection.cs
- UInt64.cs
- StyleCollection.cs
- ClockController.cs
- WebBrowserUriTypeConverter.cs