ConnectionOrientedTransportElement.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.ComponentModel;
  7. using System.Configuration;
  8. using System.Runtime;
  9. using System.ServiceModel;
  10. using System.ServiceModel.Channels;
  11. public abstract partial class ConnectionOrientedTransportElement : TransportElement
  12. {
  13. internal ConnectionOrientedTransportElement()
  14. {
  15. }
  16. [ConfigurationProperty(ConfigurationStrings.ConnectionBufferSize, DefaultValue = ConnectionOrientedTransportDefaults.ConnectionBufferSize)]
  17. [IntegerValidator(MinValue = 1)]
  18. public int ConnectionBufferSize
  19. {
  20. get { return (int)base[ConfigurationStrings.ConnectionBufferSize]; }
  21. set { base[ConfigurationStrings.ConnectionBufferSize] = value; }
  22. }
  23. [ConfigurationProperty(ConfigurationStrings.HostNameComparisonMode, DefaultValue = ConnectionOrientedTransportDefaults.HostNameComparisonMode)]
  24. [ServiceModelEnumValidatorAttribute(typeof(HostNameComparisonModeHelper))]
  25. public HostNameComparisonMode HostNameComparisonMode
  26. {
  27. get { return (HostNameComparisonMode)base[ConfigurationStrings.HostNameComparisonMode]; }
  28. set { base[ConfigurationStrings.HostNameComparisonMode] = value; }
  29. }
  30. [ConfigurationProperty(ConfigurationStrings.ChannelInitializationTimeout, DefaultValue = ConnectionOrientedTransportDefaults.ChannelInitializationTimeoutString)]
  31. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  32. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanOneTick)]
  33. public TimeSpan ChannelInitializationTimeout
  34. {
  35. get { return (TimeSpan)base[ConfigurationStrings.ChannelInitializationTimeout]; }
  36. set { base[ConfigurationStrings.ChannelInitializationTimeout] = value; }
  37. }
  38. [ConfigurationProperty(ConfigurationStrings.MaxBufferSize, DefaultValue = TransportDefaults.MaxBufferSize)]
  39. [IntegerValidator(MinValue = 1)]
  40. public int MaxBufferSize
  41. {
  42. get { return (int)base[ConfigurationStrings.MaxBufferSize]; }
  43. set { base[ConfigurationStrings.MaxBufferSize] = value; }
  44. }
  45. [ConfigurationProperty(ConfigurationStrings.MaxPendingConnections, DefaultValue = ConnectionOrientedTransportDefaults.MaxPendingConnectionsConst)]
  46. [IntegerValidator(MinValue = 0)]
  47. public int MaxPendingConnections
  48. {
  49. get { return (int)base[ConfigurationStrings.MaxPendingConnections]; }
  50. set { base[ConfigurationStrings.MaxPendingConnections] = value; }
  51. }
  52. [ConfigurationProperty(ConfigurationStrings.MaxOutputDelay, DefaultValue = ConnectionOrientedTransportDefaults.MaxOutputDelayString)]
  53. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  54. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  55. public TimeSpan MaxOutputDelay
  56. {
  57. get { return (TimeSpan)base[ConfigurationStrings.MaxOutputDelay]; }
  58. set { base[ConfigurationStrings.MaxOutputDelay] = value; }
  59. }
  60. [ConfigurationProperty(ConfigurationStrings.MaxPendingAccepts, DefaultValue = ConnectionOrientedTransportDefaults.MaxPendingAcceptsConst)]
  61. [IntegerValidator(MinValue = 0)]
  62. public int MaxPendingAccepts
  63. {
  64. get { return (int)base[ConfigurationStrings.MaxPendingAccepts]; }
  65. set { base[ConfigurationStrings.MaxPendingAccepts] = value; }
  66. }
  67. [ConfigurationProperty(ConfigurationStrings.TransferMode, DefaultValue = ConnectionOrientedTransportDefaults.TransferMode)]
  68. [ServiceModelEnumValidator(typeof(TransferModeHelper))]
  69. public TransferMode TransferMode
  70. {
  71. get { return (TransferMode)base[ConfigurationStrings.TransferMode]; }
  72. set { base[ConfigurationStrings.TransferMode] = value; }
  73. }
  74. public override void ApplyConfiguration(BindingElement bindingElement)
  75. {
  76. base.ApplyConfiguration(bindingElement);
  77. ConnectionOrientedTransportBindingElement binding = (ConnectionOrientedTransportBindingElement)bindingElement;
  78. binding.ConnectionBufferSize = this.ConnectionBufferSize;
  79. binding.HostNameComparisonMode = this.HostNameComparisonMode;
  80. binding.ChannelInitializationTimeout = this.ChannelInitializationTimeout;
  81. PropertyInformationCollection propertyInfo = this.ElementInformation.Properties;
  82. if (propertyInfo[ConfigurationStrings.MaxBufferSize].ValueOrigin != PropertyValueOrigin.Default)
  83. {
  84. binding.MaxBufferSize = this.MaxBufferSize;
  85. }
  86. if (this.MaxPendingConnections != ConnectionOrientedTransportDefaults.MaxPendingConnectionsConst)
  87. {
  88. binding.MaxPendingConnections = this.MaxPendingConnections;
  89. }
  90. binding.MaxOutputDelay = this.MaxOutputDelay;
  91. if (this.MaxPendingAccepts != ConnectionOrientedTransportDefaults.MaxPendingAcceptsConst)
  92. {
  93. binding.MaxPendingAccepts = this.MaxPendingAccepts;
  94. }
  95. binding.TransferMode = this.TransferMode;
  96. }
  97. public override void CopyFrom(ServiceModelExtensionElement from)
  98. {
  99. base.CopyFrom(from);
  100. ConnectionOrientedTransportElement source = (ConnectionOrientedTransportElement)from;
  101. #pragma warning suppress 56506 // [....], base.CopyFrom() validates the argument
  102. this.ConnectionBufferSize = source.ConnectionBufferSize;
  103. this.HostNameComparisonMode = source.HostNameComparisonMode;
  104. this.ChannelInitializationTimeout = source.ChannelInitializationTimeout;
  105. this.MaxBufferSize = source.MaxBufferSize;
  106. this.MaxPendingConnections = source.MaxPendingConnections;
  107. this.MaxOutputDelay = source.MaxOutputDelay;
  108. this.MaxPendingAccepts = source.MaxPendingAccepts;
  109. this.TransferMode = source.TransferMode;
  110. }
  111. protected internal override void InitializeFrom(BindingElement bindingElement)
  112. {
  113. base.InitializeFrom(bindingElement);
  114. ConnectionOrientedTransportBindingElement binding = (ConnectionOrientedTransportBindingElement)bindingElement;
  115. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ConnectionBufferSize, binding.ConnectionBufferSize);
  116. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.HostNameComparisonMode, binding.HostNameComparisonMode);
  117. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ChannelInitializationTimeout, binding.ChannelInitializationTimeout);
  118. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxBufferSize, binding.MaxBufferSize);
  119. if (binding.IsMaxPendingConnectionsSet)
  120. {
  121. ConfigurationProperty maxPendingConnectionsProperty = this.Properties[ConfigurationStrings.MaxPendingConnections];
  122. SetPropertyValue(maxPendingConnectionsProperty, binding.MaxPendingConnections, /*ignoreLocks = */ false);
  123. }
  124. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxOutputDelay, binding.MaxOutputDelay);
  125. if (binding.IsMaxPendingAcceptsSet)
  126. {
  127. ConfigurationProperty maxPendingAcceptsProperty = this.Properties[ConfigurationStrings.MaxPendingAccepts];
  128. SetPropertyValue(maxPendingAcceptsProperty, binding.MaxPendingAccepts, /*ignoreLocks = */ false);
  129. }
  130. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TransferMode, binding.TransferMode);
  131. }
  132. }
  133. }