536cd135cc
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
269 lines
14 KiB
C#
269 lines
14 KiB
C#
//------------------------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.ServiceModel.Configuration
|
|
{
|
|
using System.Configuration;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.ServiceModel;
|
|
using System.Globalization;
|
|
using System.Net;
|
|
using System.Net.Security;
|
|
using System.Runtime;
|
|
using System.Security.Authentication.ExtendedProtection.Configuration;
|
|
using System.Security.Principal;
|
|
using System.ServiceModel.Channels;
|
|
using System.ComponentModel;
|
|
|
|
[SuppressMessage(FxCop.Category.Configuration, FxCop.Rule.ConfigurationValidatorAttributeRule,
|
|
Justification = "The ExtendedProtectionPolicyElement configuration object and the configuration validation is owned by the NCL team.")]
|
|
public partial class HttpTransportElement : TransportElement
|
|
{
|
|
public HttpTransportElement()
|
|
{
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.AllowCookies, DefaultValue = HttpTransportDefaults.AllowCookies)]
|
|
public bool AllowCookies
|
|
{
|
|
get { return (bool)base[ConfigurationStrings.AllowCookies]; }
|
|
set { base[ConfigurationStrings.AllowCookies] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.RequestInitializationTimeout, DefaultValue = HttpTransportDefaults.RequestInitializationTimeoutString)]
|
|
[TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
|
|
[ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
|
|
public TimeSpan RequestInitializationTimeout
|
|
{
|
|
get { return (TimeSpan)base[ConfigurationStrings.RequestInitializationTimeout]; }
|
|
set { base[ConfigurationStrings.RequestInitializationTimeout] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.AuthenticationScheme, DefaultValue = HttpTransportDefaults.AuthenticationScheme)]
|
|
[StandardRuntimeFlagEnumValidator(typeof(AuthenticationSchemes))]
|
|
public AuthenticationSchemes AuthenticationScheme
|
|
{
|
|
get { return (AuthenticationSchemes)base[ConfigurationStrings.AuthenticationScheme]; }
|
|
set { base[ConfigurationStrings.AuthenticationScheme] = value; }
|
|
}
|
|
|
|
public override Type BindingElementType
|
|
{
|
|
get { return typeof(HttpTransportBindingElement); }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.BypassProxyOnLocal, DefaultValue = HttpTransportDefaults.BypassProxyOnLocal)]
|
|
public bool BypassProxyOnLocal
|
|
{
|
|
get { return (bool)base[ConfigurationStrings.BypassProxyOnLocal]; }
|
|
set { base[ConfigurationStrings.BypassProxyOnLocal] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.DecompressionEnabled, DefaultValue = HttpTransportDefaults.DecompressionEnabled)]
|
|
public bool DecompressionEnabled
|
|
{
|
|
get { return (bool)base[ConfigurationStrings.DecompressionEnabled]; }
|
|
set { base[ConfigurationStrings.DecompressionEnabled] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.HostNameComparisonMode, DefaultValue = HttpTransportDefaults.HostNameComparisonMode)]
|
|
[ServiceModelEnumValidator(typeof(HostNameComparisonModeHelper))]
|
|
public HostNameComparisonMode HostNameComparisonMode
|
|
{
|
|
get { return (HostNameComparisonMode)base[ConfigurationStrings.HostNameComparisonMode]; }
|
|
set { base[ConfigurationStrings.HostNameComparisonMode] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.KeepAliveEnabled, DefaultValue = HttpTransportDefaults.KeepAliveEnabled)]
|
|
public bool KeepAliveEnabled
|
|
{
|
|
get { return (bool)base[ConfigurationStrings.KeepAliveEnabled]; }
|
|
set { base[ConfigurationStrings.KeepAliveEnabled] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.MaxBufferSize, DefaultValue = TransportDefaults.MaxBufferSize)]
|
|
[IntegerValidator(MinValue = 1)]
|
|
public int MaxBufferSize
|
|
{
|
|
get { return (int)base[ConfigurationStrings.MaxBufferSize]; }
|
|
set { base[ConfigurationStrings.MaxBufferSize] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.MaxPendingAccepts, DefaultValue = HttpTransportDefaults.DefaultMaxPendingAccepts)]
|
|
[IntegerValidator(MinValue = 0, MaxValue = HttpTransportDefaults.MaxPendingAcceptsUpperLimit)]
|
|
public int MaxPendingAccepts
|
|
{
|
|
get { return (int)base[ConfigurationStrings.MaxPendingAccepts]; }
|
|
set { base[ConfigurationStrings.MaxPendingAccepts] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.MessageHandlerFactory, DefaultValue = HttpTransportDefaults.MessageHandlerFactory)]
|
|
[HttpMessageHandlerFactoryValidator]
|
|
public HttpMessageHandlerFactoryElement MessageHandlerFactory
|
|
{
|
|
get { return (HttpMessageHandlerFactoryElement)this[ConfigurationStrings.MessageHandlerFactory]; }
|
|
set { base[ConfigurationStrings.MessageHandlerFactory] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.ProxyAddress, DefaultValue = HttpTransportDefaults.ProxyAddress)]
|
|
public Uri ProxyAddress
|
|
{
|
|
get { return (Uri)base[ConfigurationStrings.ProxyAddress]; }
|
|
set { base[ConfigurationStrings.ProxyAddress] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.ProxyAuthenticationScheme, DefaultValue = HttpTransportDefaults.ProxyAuthenticationScheme)]
|
|
[StandardRuntimeEnumValidator(typeof(AuthenticationSchemes))]
|
|
public AuthenticationSchemes ProxyAuthenticationScheme
|
|
{
|
|
get { return (AuthenticationSchemes)base[ConfigurationStrings.ProxyAuthenticationScheme]; }
|
|
set { base[ConfigurationStrings.ProxyAuthenticationScheme] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.Realm, DefaultValue = HttpTransportDefaults.Realm)]
|
|
[StringValidator(MinLength = 0)]
|
|
public string Realm
|
|
{
|
|
get { return (string)base[ConfigurationStrings.Realm]; }
|
|
set
|
|
{
|
|
if (String.IsNullOrEmpty(value))
|
|
{
|
|
value = String.Empty;
|
|
}
|
|
base[ConfigurationStrings.Realm] = value;
|
|
}
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.TransferMode, DefaultValue = HttpTransportDefaults.TransferMode)]
|
|
[ServiceModelEnumValidator(typeof(TransferModeHelper))]
|
|
public TransferMode TransferMode
|
|
{
|
|
get { return (TransferMode)base[ConfigurationStrings.TransferMode]; }
|
|
set { base[ConfigurationStrings.TransferMode] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.UnsafeConnectionNtlmAuthentication, DefaultValue = HttpTransportDefaults.UnsafeConnectionNtlmAuthentication)]
|
|
public bool UnsafeConnectionNtlmAuthentication
|
|
{
|
|
get { return (bool)base[ConfigurationStrings.UnsafeConnectionNtlmAuthentication]; }
|
|
set { base[ConfigurationStrings.UnsafeConnectionNtlmAuthentication] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.UseDefaultWebProxy, DefaultValue = HttpTransportDefaults.UseDefaultWebProxy)]
|
|
public bool UseDefaultWebProxy
|
|
{
|
|
get { return (bool)base[ConfigurationStrings.UseDefaultWebProxy]; }
|
|
set { base[ConfigurationStrings.UseDefaultWebProxy] = value; }
|
|
}
|
|
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.ExtendedProtectionPolicy)]
|
|
public ExtendedProtectionPolicyElement ExtendedProtectionPolicy
|
|
{
|
|
get { return (ExtendedProtectionPolicyElement)base[ConfigurationStrings.ExtendedProtectionPolicy]; }
|
|
private set { base[ConfigurationStrings.ExtendedProtectionPolicy] = value; }
|
|
}
|
|
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage(FxCop.Category.Configuration, "Configuration104")]
|
|
[ConfigurationProperty(ConfigurationStrings.WebSocketSettingsSectionName)]
|
|
public WebSocketTransportSettingsElement WebSocketSettings
|
|
{
|
|
get { return (WebSocketTransportSettingsElement)base[ConfigurationStrings.WebSocketSettingsSectionName]; }
|
|
set { base[ConfigurationStrings.WebSocketSettingsSectionName] = value; }
|
|
}
|
|
|
|
public override void ApplyConfiguration(BindingElement bindingElement)
|
|
{
|
|
base.ApplyConfiguration(bindingElement);
|
|
HttpTransportBindingElement binding = (HttpTransportBindingElement)bindingElement;
|
|
|
|
binding.AllowCookies = this.AllowCookies;
|
|
binding.AuthenticationScheme = this.AuthenticationScheme;
|
|
binding.BypassProxyOnLocal = this.BypassProxyOnLocal;
|
|
binding.DecompressionEnabled = this.DecompressionEnabled;
|
|
binding.KeepAliveEnabled = this.KeepAliveEnabled;
|
|
binding.HostNameComparisonMode = this.HostNameComparisonMode;
|
|
PropertyInformationCollection propertyInfo = this.ElementInformation.Properties;
|
|
if (propertyInfo[ConfigurationStrings.MaxBufferSize].ValueOrigin != PropertyValueOrigin.Default)
|
|
{
|
|
binding.MaxBufferSize = this.MaxBufferSize;
|
|
}
|
|
binding.MaxPendingAccepts = this.MaxPendingAccepts;
|
|
binding.ProxyAddress = this.ProxyAddress;
|
|
binding.ProxyAuthenticationScheme = this.ProxyAuthenticationScheme;
|
|
binding.Realm = this.Realm;
|
|
binding.RequestInitializationTimeout = this.RequestInitializationTimeout;
|
|
binding.TransferMode = this.TransferMode;
|
|
binding.UnsafeConnectionNtlmAuthentication = this.UnsafeConnectionNtlmAuthentication;
|
|
binding.UseDefaultWebProxy = this.UseDefaultWebProxy;
|
|
binding.ExtendedProtectionPolicy = ChannelBindingUtility.BuildPolicy(this.ExtendedProtectionPolicy);
|
|
this.WebSocketSettings.ApplyConfiguration(binding.WebSocketSettings);
|
|
if (this.MessageHandlerFactory != null)
|
|
{
|
|
binding.MessageHandlerFactory = HttpMessageHandlerFactory.CreateFromConfigurationElement(this.MessageHandlerFactory);
|
|
}
|
|
}
|
|
|
|
public override void CopyFrom(ServiceModelExtensionElement from)
|
|
{
|
|
base.CopyFrom(from);
|
|
|
|
HttpTransportElement source = (HttpTransportElement)from;
|
|
#pragma warning suppress 56506 // Microsoft, base.CopyFrom() validates the argument
|
|
this.AllowCookies = source.AllowCookies;
|
|
this.RequestInitializationTimeout = source.RequestInitializationTimeout;
|
|
this.AuthenticationScheme = source.AuthenticationScheme;
|
|
this.BypassProxyOnLocal = source.BypassProxyOnLocal;
|
|
this.DecompressionEnabled = source.DecompressionEnabled;
|
|
this.KeepAliveEnabled = source.KeepAliveEnabled;
|
|
this.HostNameComparisonMode = source.HostNameComparisonMode;
|
|
this.MaxBufferSize = source.MaxBufferSize;
|
|
this.MaxPendingAccepts = source.MaxPendingAccepts;
|
|
this.ProxyAddress = source.ProxyAddress;
|
|
this.ProxyAuthenticationScheme = source.ProxyAuthenticationScheme;
|
|
this.Realm = source.Realm;
|
|
this.TransferMode = source.TransferMode;
|
|
this.UnsafeConnectionNtlmAuthentication = source.UnsafeConnectionNtlmAuthentication;
|
|
this.UseDefaultWebProxy = source.UseDefaultWebProxy;
|
|
this.WebSocketSettings = source.WebSocketSettings;
|
|
this.MessageHandlerFactory = source.MessageHandlerFactory;
|
|
ChannelBindingUtility.CopyFrom(source.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy);
|
|
}
|
|
|
|
protected override TransportBindingElement CreateDefaultBindingElement()
|
|
{
|
|
return new HttpTransportBindingElement();
|
|
}
|
|
|
|
protected internal override void InitializeFrom(BindingElement bindingElement)
|
|
{
|
|
base.InitializeFrom(bindingElement);
|
|
HttpTransportBindingElement source = (HttpTransportBindingElement)bindingElement;
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.AllowCookies, source.AllowCookies);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.AuthenticationScheme, source.AuthenticationScheme);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.DecompressionEnabled, source.DecompressionEnabled);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.BypassProxyOnLocal, source.BypassProxyOnLocal);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.KeepAliveEnabled, source.KeepAliveEnabled);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.HostNameComparisonMode, source.HostNameComparisonMode);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxBufferSize, source.MaxBufferSize);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxPendingAccepts, source.MaxPendingAccepts);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAddress, source.ProxyAddress);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAuthenticationScheme, source.ProxyAuthenticationScheme);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.Realm, source.Realm);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.RequestInitializationTimeout, source.RequestInitializationTimeout);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TransferMode, source.TransferMode);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UnsafeConnectionNtlmAuthentication, source.UnsafeConnectionNtlmAuthentication);
|
|
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UseDefaultWebProxy, source.UseDefaultWebProxy);
|
|
this.WebSocketSettings.InitializeFrom(source.WebSocketSettings);
|
|
if (source.MessageHandlerFactory != null)
|
|
{
|
|
this.MessageHandlerFactory = source.MessageHandlerFactory.GenerateConfigurationElement();
|
|
}
|
|
|
|
ChannelBindingUtility.InitializeFrom(source.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy);
|
|
}
|
|
}
|
|
}
|