1 // 2 // StandardBindingElement.cs 3 // 4 // Author: 5 // Atsushi Enomoto <atsushi@ximian.com> 6 // 7 // Copyright (C) 2006 Novell, Inc. http://www.novell.com 8 // 9 // Permission is hereby granted, free of charge, to any person obtaining 10 // a copy of this software and associated documentation files (the 11 // "Software"), to deal in the Software without restriction, including 12 // without limitation the rights to use, copy, modify, merge, publish, 13 // distribute, sublicense, and/or sell copies of the Software, and to 14 // permit persons to whom the Software is furnished to do so, subject to 15 // the following conditions: 16 // 17 // The above copyright notice and this permission notice shall be 18 // included in all copies or substantial portions of the Software. 19 // 20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 // 28 29 using System; 30 using System.Collections; 31 using System.Collections.Generic; 32 using System.Collections.ObjectModel; 33 using System.ComponentModel; 34 using System.Configuration; 35 using System.Net; 36 using System.Net.Security; 37 using System.Reflection; 38 using System.Security.Cryptography.X509Certificates; 39 using System.Security.Principal; 40 using System.IdentityModel.Claims; 41 using System.IdentityModel.Policy; 42 using System.IdentityModel.Tokens; 43 using System.ServiceModel; 44 using System.ServiceModel.Channels; 45 using System.ServiceModel.Description; 46 using System.ServiceModel.Diagnostics; 47 using System.ServiceModel.Dispatcher; 48 using System.ServiceModel.MsmqIntegration; 49 using System.ServiceModel.PeerResolvers; 50 using System.ServiceModel.Security; 51 using System.Runtime.Serialization; 52 using System.Text; 53 using System.Xml; 54 55 namespace System.ServiceModel.Configuration 56 { 57 public abstract class StandardBindingElement 58 : ConfigurationElement, IBindingConfigurationElement 59 { 60 ConfigurationPropertyCollection _properties; 61 StandardBindingElement()62 protected StandardBindingElement () 63 { 64 } 65 StandardBindingElement(string name)66 protected StandardBindingElement (string name) { 67 Name = name; 68 } 69 70 71 // Properties 72 protected abstract Type BindingElementType { get; } 73 74 [ConfigurationProperty ("closeTimeout", 75 Options = ConfigurationPropertyOptions.None, 76 DefaultValue = "00:01:00")] 77 [TypeConverter (typeof (TimeSpanConverter))] 78 public TimeSpan CloseTimeout { 79 get { return (TimeSpan) this ["closeTimeout"]; } 80 set { this ["closeTimeout"] = value; } 81 } 82 83 [StringValidator ( MinLength = 1, 84 MaxLength = int.MaxValue, 85 InvalidCharacters = null)] 86 [ConfigurationProperty ("name", 87 Options = ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey, 88 IsRequired = true, 89 IsKey = true)] 90 public string Name { 91 get { return (string) this ["name"]; } 92 set { this ["name"] = value; } 93 } 94 95 [ConfigurationProperty ("openTimeout", 96 Options = ConfigurationPropertyOptions.None, 97 DefaultValue = "00:01:00")] 98 [TypeConverter (typeof (TimeSpanConverter))] 99 public TimeSpan OpenTimeout { 100 get { return (TimeSpan) this ["openTimeout"]; } 101 set { this ["openTimeout"] = value; } 102 } 103 104 protected override ConfigurationPropertyCollection Properties { 105 get { 106 if (_properties == null) { 107 _properties = new ConfigurationPropertyCollection (); 108 _properties.Add (new ConfigurationProperty ("closeTimeout", typeof (TimeSpan), "00:01:00", null, null, ConfigurationPropertyOptions.None)); 109 _properties.Add (new ConfigurationProperty ("name", typeof (string), null, null, new StringValidator (1), ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey)); 110 _properties.Add (new ConfigurationProperty ("openTimeout", typeof (TimeSpan), "00:01:00", null, null, ConfigurationPropertyOptions.None)); 111 _properties.Add (new ConfigurationProperty ("receiveTimeout", typeof (TimeSpan), "00:10:00", null, null, ConfigurationPropertyOptions.None)); 112 _properties.Add (new ConfigurationProperty ("sendTimeout", typeof (TimeSpan), "00:01:00", null, null, ConfigurationPropertyOptions.None)); 113 } 114 return _properties; 115 } 116 } 117 118 [ConfigurationProperty ("receiveTimeout", 119 Options = ConfigurationPropertyOptions.None, 120 DefaultValue = "00:10:00")] 121 [TypeConverter (typeof (TimeSpanConverter))] 122 public TimeSpan ReceiveTimeout { 123 get { return (TimeSpan) this ["receiveTimeout"]; } 124 set { this ["receiveTimeout"] = value; } 125 } 126 127 [ConfigurationProperty ("sendTimeout", 128 Options = ConfigurationPropertyOptions.None, 129 DefaultValue = "00:01:00")] 130 [TypeConverter (typeof (TimeSpanConverter))] 131 public TimeSpan SendTimeout { 132 get { return (TimeSpan) this ["sendTimeout"]; } 133 set { this ["sendTimeout"] = value; } 134 } 135 OnApplyConfiguration(Binding binding)136 protected abstract void OnApplyConfiguration (Binding binding); 137 ApplyConfiguration(Binding binding)138 public void ApplyConfiguration (Binding binding) { 139 binding.CloseTimeout = CloseTimeout; 140 binding.OpenTimeout = OpenTimeout; 141 binding.ReceiveTimeout = ReceiveTimeout; 142 binding.SendTimeout = SendTimeout; 143 OnApplyConfiguration (binding); 144 } 145 InitializeFrom(Binding binding)146 protected internal virtual void InitializeFrom (Binding binding) 147 { 148 CloseTimeout = binding.CloseTimeout; 149 OpenTimeout = binding.OpenTimeout; 150 ReceiveTimeout = binding.ReceiveTimeout; 151 SendTimeout = binding.SendTimeout; 152 } 153 } 154 155 } 156