HttpTransportElement.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.Configuration;
  7. using System.Diagnostics.CodeAnalysis;
  8. using System.ServiceModel;
  9. using System.Globalization;
  10. using System.Net;
  11. using System.Net.Security;
  12. using System.Runtime;
  13. using System.Security.Authentication.ExtendedProtection.Configuration;
  14. using System.Security.Principal;
  15. using System.ServiceModel.Channels;
  16. using System.ComponentModel;
  17. [SuppressMessage(FxCop.Category.Configuration, FxCop.Rule.ConfigurationValidatorAttributeRule,
  18. Justification = "The ExtendedProtectionPolicyElement configuration object and the configuration validation is owned by the NCL team.")]
  19. public partial class HttpTransportElement : TransportElement
  20. {
  21. public HttpTransportElement()
  22. {
  23. }
  24. [ConfigurationProperty(ConfigurationStrings.AllowCookies, DefaultValue = HttpTransportDefaults.AllowCookies)]
  25. public bool AllowCookies
  26. {
  27. get { return (bool)base[ConfigurationStrings.AllowCookies]; }
  28. set { base[ConfigurationStrings.AllowCookies] = value; }
  29. }
  30. [ConfigurationProperty(ConfigurationStrings.RequestInitializationTimeout, DefaultValue = HttpTransportDefaults.RequestInitializationTimeoutString)]
  31. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  32. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  33. public TimeSpan RequestInitializationTimeout
  34. {
  35. get { return (TimeSpan)base[ConfigurationStrings.RequestInitializationTimeout]; }
  36. set { base[ConfigurationStrings.RequestInitializationTimeout] = value; }
  37. }
  38. [ConfigurationProperty(ConfigurationStrings.AuthenticationScheme, DefaultValue = HttpTransportDefaults.AuthenticationScheme)]
  39. [StandardRuntimeFlagEnumValidator(typeof(AuthenticationSchemes))]
  40. public AuthenticationSchemes AuthenticationScheme
  41. {
  42. get { return (AuthenticationSchemes)base[ConfigurationStrings.AuthenticationScheme]; }
  43. set { base[ConfigurationStrings.AuthenticationScheme] = value; }
  44. }
  45. public override Type BindingElementType
  46. {
  47. get { return typeof(HttpTransportBindingElement); }
  48. }
  49. [ConfigurationProperty(ConfigurationStrings.BypassProxyOnLocal, DefaultValue = HttpTransportDefaults.BypassProxyOnLocal)]
  50. public bool BypassProxyOnLocal
  51. {
  52. get { return (bool)base[ConfigurationStrings.BypassProxyOnLocal]; }
  53. set { base[ConfigurationStrings.BypassProxyOnLocal] = value; }
  54. }
  55. [ConfigurationProperty(ConfigurationStrings.DecompressionEnabled, DefaultValue = HttpTransportDefaults.DecompressionEnabled)]
  56. public bool DecompressionEnabled
  57. {
  58. get { return (bool)base[ConfigurationStrings.DecompressionEnabled]; }
  59. set { base[ConfigurationStrings.DecompressionEnabled] = value; }
  60. }
  61. [ConfigurationProperty(ConfigurationStrings.HostNameComparisonMode, DefaultValue = HttpTransportDefaults.HostNameComparisonMode)]
  62. [ServiceModelEnumValidator(typeof(HostNameComparisonModeHelper))]
  63. public HostNameComparisonMode HostNameComparisonMode
  64. {
  65. get { return (HostNameComparisonMode)base[ConfigurationStrings.HostNameComparisonMode]; }
  66. set { base[ConfigurationStrings.HostNameComparisonMode] = value; }
  67. }
  68. [ConfigurationProperty(ConfigurationStrings.KeepAliveEnabled, DefaultValue = HttpTransportDefaults.KeepAliveEnabled)]
  69. public bool KeepAliveEnabled
  70. {
  71. get { return (bool)base[ConfigurationStrings.KeepAliveEnabled]; }
  72. set { base[ConfigurationStrings.KeepAliveEnabled] = value; }
  73. }
  74. [ConfigurationProperty(ConfigurationStrings.MaxBufferSize, DefaultValue = TransportDefaults.MaxBufferSize)]
  75. [IntegerValidator(MinValue = 1)]
  76. public int MaxBufferSize
  77. {
  78. get { return (int)base[ConfigurationStrings.MaxBufferSize]; }
  79. set { base[ConfigurationStrings.MaxBufferSize] = value; }
  80. }
  81. [ConfigurationProperty(ConfigurationStrings.MaxPendingAccepts, DefaultValue = HttpTransportDefaults.DefaultMaxPendingAccepts)]
  82. [IntegerValidator(MinValue = 0, MaxValue = HttpTransportDefaults.MaxPendingAcceptsUpperLimit)]
  83. public int MaxPendingAccepts
  84. {
  85. get { return (int)base[ConfigurationStrings.MaxPendingAccepts]; }
  86. set { base[ConfigurationStrings.MaxPendingAccepts] = value; }
  87. }
  88. [ConfigurationProperty(ConfigurationStrings.MessageHandlerFactory, DefaultValue = HttpTransportDefaults.MessageHandlerFactory)]
  89. [HttpMessageHandlerFactoryValidator]
  90. public HttpMessageHandlerFactoryElement MessageHandlerFactory
  91. {
  92. get { return (HttpMessageHandlerFactoryElement)this[ConfigurationStrings.MessageHandlerFactory]; }
  93. set { base[ConfigurationStrings.MessageHandlerFactory] = value; }
  94. }
  95. [ConfigurationProperty(ConfigurationStrings.ProxyAddress, DefaultValue = HttpTransportDefaults.ProxyAddress)]
  96. public Uri ProxyAddress
  97. {
  98. get { return (Uri)base[ConfigurationStrings.ProxyAddress]; }
  99. set { base[ConfigurationStrings.ProxyAddress] = value; }
  100. }
  101. [ConfigurationProperty(ConfigurationStrings.ProxyAuthenticationScheme, DefaultValue = HttpTransportDefaults.ProxyAuthenticationScheme)]
  102. [StandardRuntimeEnumValidator(typeof(AuthenticationSchemes))]
  103. public AuthenticationSchemes ProxyAuthenticationScheme
  104. {
  105. get { return (AuthenticationSchemes)base[ConfigurationStrings.ProxyAuthenticationScheme]; }
  106. set { base[ConfigurationStrings.ProxyAuthenticationScheme] = value; }
  107. }
  108. [ConfigurationProperty(ConfigurationStrings.Realm, DefaultValue = HttpTransportDefaults.Realm)]
  109. [StringValidator(MinLength = 0)]
  110. public string Realm
  111. {
  112. get { return (string)base[ConfigurationStrings.Realm]; }
  113. set
  114. {
  115. if (String.IsNullOrEmpty(value))
  116. {
  117. value = String.Empty;
  118. }
  119. base[ConfigurationStrings.Realm] = value;
  120. }
  121. }
  122. [ConfigurationProperty(ConfigurationStrings.TransferMode, DefaultValue = HttpTransportDefaults.TransferMode)]
  123. [ServiceModelEnumValidator(typeof(TransferModeHelper))]
  124. public TransferMode TransferMode
  125. {
  126. get { return (TransferMode)base[ConfigurationStrings.TransferMode]; }
  127. set { base[ConfigurationStrings.TransferMode] = value; }
  128. }
  129. [ConfigurationProperty(ConfigurationStrings.UnsafeConnectionNtlmAuthentication, DefaultValue = HttpTransportDefaults.UnsafeConnectionNtlmAuthentication)]
  130. public bool UnsafeConnectionNtlmAuthentication
  131. {
  132. get { return (bool)base[ConfigurationStrings.UnsafeConnectionNtlmAuthentication]; }
  133. set { base[ConfigurationStrings.UnsafeConnectionNtlmAuthentication] = value; }
  134. }
  135. [ConfigurationProperty(ConfigurationStrings.UseDefaultWebProxy, DefaultValue = HttpTransportDefaults.UseDefaultWebProxy)]
  136. public bool UseDefaultWebProxy
  137. {
  138. get { return (bool)base[ConfigurationStrings.UseDefaultWebProxy]; }
  139. set { base[ConfigurationStrings.UseDefaultWebProxy] = value; }
  140. }
  141. [ConfigurationProperty(ConfigurationStrings.ExtendedProtectionPolicy)]
  142. public ExtendedProtectionPolicyElement ExtendedProtectionPolicy
  143. {
  144. get { return (ExtendedProtectionPolicyElement)base[ConfigurationStrings.ExtendedProtectionPolicy]; }
  145. private set { base[ConfigurationStrings.ExtendedProtectionPolicy] = value; }
  146. }
  147. [System.Diagnostics.CodeAnalysis.SuppressMessage(FxCop.Category.Configuration, "Configuration104")]
  148. [ConfigurationProperty(ConfigurationStrings.WebSocketSettingsSectionName)]
  149. public WebSocketTransportSettingsElement WebSocketSettings
  150. {
  151. get { return (WebSocketTransportSettingsElement)base[ConfigurationStrings.WebSocketSettingsSectionName]; }
  152. set { base[ConfigurationStrings.WebSocketSettingsSectionName] = value; }
  153. }
  154. public override void ApplyConfiguration(BindingElement bindingElement)
  155. {
  156. base.ApplyConfiguration(bindingElement);
  157. HttpTransportBindingElement binding = (HttpTransportBindingElement)bindingElement;
  158. binding.AllowCookies = this.AllowCookies;
  159. binding.AuthenticationScheme = this.AuthenticationScheme;
  160. binding.BypassProxyOnLocal = this.BypassProxyOnLocal;
  161. binding.DecompressionEnabled = this.DecompressionEnabled;
  162. binding.KeepAliveEnabled = this.KeepAliveEnabled;
  163. binding.HostNameComparisonMode = this.HostNameComparisonMode;
  164. PropertyInformationCollection propertyInfo = this.ElementInformation.Properties;
  165. if (propertyInfo[ConfigurationStrings.MaxBufferSize].ValueOrigin != PropertyValueOrigin.Default)
  166. {
  167. binding.MaxBufferSize = this.MaxBufferSize;
  168. }
  169. binding.MaxPendingAccepts = this.MaxPendingAccepts;
  170. binding.ProxyAddress = this.ProxyAddress;
  171. binding.ProxyAuthenticationScheme = this.ProxyAuthenticationScheme;
  172. binding.Realm = this.Realm;
  173. binding.RequestInitializationTimeout = this.RequestInitializationTimeout;
  174. binding.TransferMode = this.TransferMode;
  175. binding.UnsafeConnectionNtlmAuthentication = this.UnsafeConnectionNtlmAuthentication;
  176. binding.UseDefaultWebProxy = this.UseDefaultWebProxy;
  177. binding.ExtendedProtectionPolicy = ChannelBindingUtility.BuildPolicy(this.ExtendedProtectionPolicy);
  178. this.WebSocketSettings.ApplyConfiguration(binding.WebSocketSettings);
  179. if (this.MessageHandlerFactory != null)
  180. {
  181. binding.MessageHandlerFactory = HttpMessageHandlerFactory.CreateFromConfigurationElement(this.MessageHandlerFactory);
  182. }
  183. }
  184. public override void CopyFrom(ServiceModelExtensionElement from)
  185. {
  186. base.CopyFrom(from);
  187. HttpTransportElement source = (HttpTransportElement)from;
  188. #pragma warning suppress 56506 // [....], base.CopyFrom() validates the argument
  189. this.AllowCookies = source.AllowCookies;
  190. this.RequestInitializationTimeout = source.RequestInitializationTimeout;
  191. this.AuthenticationScheme = source.AuthenticationScheme;
  192. this.BypassProxyOnLocal = source.BypassProxyOnLocal;
  193. this.DecompressionEnabled = source.DecompressionEnabled;
  194. this.KeepAliveEnabled = source.KeepAliveEnabled;
  195. this.HostNameComparisonMode = source.HostNameComparisonMode;
  196. this.MaxBufferSize = source.MaxBufferSize;
  197. this.MaxPendingAccepts = source.MaxPendingAccepts;
  198. this.ProxyAddress = source.ProxyAddress;
  199. this.ProxyAuthenticationScheme = source.ProxyAuthenticationScheme;
  200. this.Realm = source.Realm;
  201. this.TransferMode = source.TransferMode;
  202. this.UnsafeConnectionNtlmAuthentication = source.UnsafeConnectionNtlmAuthentication;
  203. this.UseDefaultWebProxy = source.UseDefaultWebProxy;
  204. this.WebSocketSettings = source.WebSocketSettings;
  205. this.MessageHandlerFactory = source.MessageHandlerFactory;
  206. ChannelBindingUtility.CopyFrom(source.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy);
  207. }
  208. protected override TransportBindingElement CreateDefaultBindingElement()
  209. {
  210. return new HttpTransportBindingElement();
  211. }
  212. protected internal override void InitializeFrom(BindingElement bindingElement)
  213. {
  214. base.InitializeFrom(bindingElement);
  215. HttpTransportBindingElement source = (HttpTransportBindingElement)bindingElement;
  216. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.AllowCookies, source.AllowCookies);
  217. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.AuthenticationScheme, source.AuthenticationScheme);
  218. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.DecompressionEnabled, source.DecompressionEnabled);
  219. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.BypassProxyOnLocal, source.BypassProxyOnLocal);
  220. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.KeepAliveEnabled, source.KeepAliveEnabled);
  221. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.HostNameComparisonMode, source.HostNameComparisonMode);
  222. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxBufferSize, source.MaxBufferSize);
  223. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxPendingAccepts, source.MaxPendingAccepts);
  224. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAddress, source.ProxyAddress);
  225. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAuthenticationScheme, source.ProxyAuthenticationScheme);
  226. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.Realm, source.Realm);
  227. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.RequestInitializationTimeout, source.RequestInitializationTimeout);
  228. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TransferMode, source.TransferMode);
  229. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UnsafeConnectionNtlmAuthentication, source.UnsafeConnectionNtlmAuthentication);
  230. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UseDefaultWebProxy, source.UseDefaultWebProxy);
  231. this.WebSocketSettings.InitializeFrom(source.WebSocketSettings);
  232. if (source.MessageHandlerFactory != null)
  233. {
  234. this.MessageHandlerFactory = source.MessageHandlerFactory.GenerateConfigurationElement();
  235. }
  236. ChannelBindingUtility.InitializeFrom(source.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy);
  237. }
  238. }
  239. }