PeerCustomResolverElement.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.Configuration;
  7. using System.ServiceModel.Description;
  8. using System.Globalization;
  9. using System.Net;
  10. using System.Net.Security;
  11. using System.ServiceModel;
  12. using System.ServiceModel.Channels;
  13. using System.ServiceModel.PeerResolvers;
  14. using System.ComponentModel;
  15. public sealed partial class PeerCustomResolverElement : ServiceModelConfigurationElement
  16. {
  17. [ConfigurationProperty(ConfigurationStrings.Address, DefaultValue = null, Options = ConfigurationPropertyOptions.None)]
  18. public Uri Address
  19. {
  20. get { return (Uri)base[ConfigurationStrings.Address]; }
  21. set { base[ConfigurationStrings.Address] = value; }
  22. }
  23. [ConfigurationProperty(ConfigurationStrings.Headers)]
  24. public AddressHeaderCollectionElement Headers
  25. {
  26. get { return (AddressHeaderCollectionElement)base[ConfigurationStrings.Headers]; }
  27. }
  28. [ConfigurationProperty(ConfigurationStrings.Identity)]
  29. public IdentityElement Identity
  30. {
  31. get { return (IdentityElement)base[ConfigurationStrings.Identity]; }
  32. }
  33. [ConfigurationProperty(ConfigurationStrings.Binding, DefaultValue = "")]
  34. [StringValidator(MinLength = 0)]
  35. public string Binding
  36. {
  37. get { return (string)base[ConfigurationStrings.Binding]; }
  38. set { base[ConfigurationStrings.Binding] = value; }
  39. }
  40. [ConfigurationProperty(ConfigurationStrings.BindingConfiguration, DefaultValue = "")]
  41. [StringValidator(MinLength = 0)]
  42. public string BindingConfiguration
  43. {
  44. get { return (string)base[ConfigurationStrings.BindingConfiguration]; }
  45. set { base[ConfigurationStrings.BindingConfiguration] = value; }
  46. }
  47. [ConfigurationProperty(ConfigurationStrings.PeerResolverType, DefaultValue = "")]
  48. [StringValidator(MinLength = 0)]
  49. public string ResolverType
  50. {
  51. get { return (string)base[ConfigurationStrings.PeerResolverType]; }
  52. set { base[ConfigurationStrings.PeerResolverType] = value; }
  53. }
  54. internal void ApplyConfiguration(PeerCustomResolverSettings settings)
  55. {
  56. if (settings == null)
  57. {
  58. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("settings");
  59. }
  60. if (this.Address != null)
  61. {
  62. settings.Address = new EndpointAddress(this.Address, ConfigLoader.LoadIdentity(this.Identity), this.Headers.Headers);
  63. }
  64. settings.BindingSection = this.Binding;
  65. settings.BindingConfiguration = this.BindingConfiguration;
  66. if (!String.IsNullOrEmpty(this.Binding) && !String.IsNullOrEmpty(this.BindingConfiguration))
  67. settings.Binding = ConfigLoader.LookupBinding(this.Binding, this.BindingConfiguration);
  68. if (!String.IsNullOrEmpty(this.ResolverType))
  69. {
  70. Type myResolverType = Type.GetType(this.ResolverType, false);
  71. if (myResolverType != null)
  72. {
  73. settings.Resolver = Activator.CreateInstance(myResolverType) as PeerResolver;
  74. }
  75. else
  76. {
  77. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(
  78. SR.GetString(SR.PeerResolverInvalid, this.ResolverType)));
  79. }
  80. }
  81. }
  82. internal void InitializeFrom(PeerCustomResolverSettings settings)
  83. {
  84. if (settings == null)
  85. {
  86. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("settings");
  87. }
  88. if (settings.Address != null)
  89. {
  90. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.Address, settings.Address.Uri);
  91. this.Identity.InitializeFrom(settings.Address.Identity);
  92. }
  93. if (settings.Resolver != null)
  94. {
  95. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.PeerResolverType, settings.Resolver.GetType().AssemblyQualifiedName);
  96. }
  97. if (settings.Binding != null)
  98. {
  99. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.BindingConfiguration, PeerStrings.PeerCustomResolver + Guid.NewGuid().ToString());
  100. string sectionName;
  101. BindingsSection.TryAdd(this.BindingConfiguration,
  102. settings.Binding,
  103. out sectionName);
  104. this.Binding = sectionName;
  105. }
  106. }
  107. }
  108. }