ClientSection.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.Configuration;
  7. using System.Runtime;
  8. using System.Security;
  9. public sealed partial class ClientSection : ConfigurationSection, IConfigurationContextProviderInternal
  10. {
  11. public ClientSection()
  12. {
  13. }
  14. [ConfigurationProperty(ConfigurationStrings.DefaultCollectionName, Options = ConfigurationPropertyOptions.IsDefaultCollection)]
  15. public ChannelEndpointElementCollection Endpoints
  16. {
  17. get { return (ChannelEndpointElementCollection)this[ConfigurationStrings.DefaultCollectionName]; }
  18. }
  19. [ConfigurationProperty(ConfigurationStrings.Metadata)]
  20. public MetadataElement Metadata
  21. {
  22. get { return (MetadataElement)this[ConfigurationStrings.Metadata]; }
  23. }
  24. internal static ClientSection GetSection()
  25. {
  26. return (ClientSection)ConfigurationHelpers.GetSection(ConfigurationStrings.ClientSectionPath);
  27. }
  28. [Fx.Tag.SecurityNote(Critical = "Calls Critical method UnsafeGetSection which elevates in order to fetch config."
  29. + "Caller must guard access to resultant config section.")]
  30. [SecurityCritical]
  31. internal static ClientSection UnsafeGetSection()
  32. {
  33. return (ClientSection)ConfigurationHelpers.UnsafeGetSection(ConfigurationStrings.ClientSectionPath);
  34. }
  35. [Fx.Tag.SecurityNote(Critical = "Calls Critical method UnsafeGetSection which elevates in order to fetch config."
  36. + "Caller must guard access to resultant config section.")]
  37. [SecurityCritical]
  38. internal static ClientSection UnsafeGetSection(ContextInformation contextInformation)
  39. {
  40. return (ClientSection)ConfigurationHelpers.UnsafeGetSectionFromContext(contextInformation, ConfigurationStrings.ClientSectionPath);
  41. }
  42. protected override void InitializeDefault()
  43. {
  44. this.Metadata.SetDefaults();
  45. }
  46. protected override void PostDeserialize()
  47. {
  48. this.ValidateSection();
  49. base.PostDeserialize();
  50. }
  51. void ValidateSection()
  52. {
  53. ContextInformation context = ConfigurationHelpers.GetEvaluationContext(this);
  54. if (context != null)
  55. {
  56. foreach (ChannelEndpointElement endpoint in this.Endpoints)
  57. {
  58. if (string.IsNullOrEmpty(endpoint.Kind))
  59. {
  60. if (!string.IsNullOrEmpty(endpoint.EndpointConfiguration))
  61. {
  62. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigInvalidAttribute, "endpointConfiguration", "endpoint", "kind")));
  63. }
  64. if (string.IsNullOrEmpty(endpoint.Binding))
  65. {
  66. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.RequiredAttributeMissing, "binding", "endpoint")));
  67. }
  68. if (string.IsNullOrEmpty(endpoint.Contract))
  69. {
  70. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.RequiredAttributeMissing, "contract", "endpoint")));
  71. }
  72. }
  73. if (string.IsNullOrEmpty(endpoint.Binding) && !string.IsNullOrEmpty(endpoint.BindingConfiguration))
  74. {
  75. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigInvalidAttribute, "bindingConfiguration", "endpoint", "binding")));
  76. }
  77. BehaviorsSection.ValidateEndpointBehaviorReference(endpoint.BehaviorConfiguration, context, endpoint);
  78. BindingsSection.ValidateBindingReference(endpoint.Binding, endpoint.BindingConfiguration, context, endpoint);
  79. StandardEndpointsSection.ValidateEndpointReference(endpoint.Kind, endpoint.EndpointConfiguration, context, endpoint);
  80. }
  81. }
  82. }
  83. ContextInformation IConfigurationContextProviderInternal.GetEvaluationContext()
  84. {
  85. return this.EvaluationContext;
  86. }
  87. [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - the return value will be used for a security decision -- see comment in interface definition.")]
  88. ContextInformation IConfigurationContextProviderInternal.GetOriginalEvaluationContext()
  89. {
  90. Fx.Assert("Not implemented: IConfigurationContextProviderInternal.GetOriginalEvaluationContext");
  91. return null;
  92. }
  93. }
  94. }