PageRenderTime 1372ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/ExpressInteropBinding/Microsoft.ServiceModel.Interop/Metro/Configuration/MetroBindingElement.cs

#
C# | 112 lines | 62 code | 17 blank | 33 comment | 1 complexity | 8c301545777775eae8827dbd3693d8ff MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0
  1. // <copyright file="MetroBindingElement.cs" company="Microsoft Corporation">
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // </copyright>
  4. namespace Microsoft.ServiceModel.Interop.Metro.Configuration
  5. {
  6. using System;
  7. using System.Configuration;
  8. using System.ServiceModel.Channels;
  9. using Microsoft.ServiceModel.Interop.Configuration;
  10. /// <summary>
  11. /// Binding element implementation for Metro
  12. /// </summary>
  13. public class MetroBindingElement : InteropBindingElement
  14. {
  15. private const string SecurityProperty = "security";
  16. private const string ReliableSessionProperty = "reliableSession";
  17. /// <summary>
  18. /// Initializes a new instance of the MetroBindingElement class
  19. /// </summary>
  20. /// <param name="configurationName">Binding configuration name</param>
  21. public MetroBindingElement(string configurationName) :
  22. base(configurationName)
  23. {
  24. }
  25. /// <summary>
  26. /// Initializes a new instance of the MetroBindingElement class
  27. /// </summary>
  28. public MetroBindingElement()
  29. : this(null)
  30. {
  31. }
  32. /// <summary>
  33. /// Gets the Security binding element
  34. /// </summary>
  35. [ConfigurationProperty(SecurityProperty)]
  36. public MetroSecurityElement Security
  37. {
  38. get { return (MetroSecurityElement)base[SecurityProperty]; }
  39. }
  40. /// <summary>
  41. /// Gets the reliable session binding element
  42. /// </summary>
  43. [ConfigurationProperty(ReliableSessionProperty)]
  44. public MetroReliableSessionElement ReliableSession
  45. {
  46. get { return (MetroReliableSessionElement)base[ReliableSessionProperty]; }
  47. }
  48. /// <summary>
  49. /// Gets all the available configuration properties
  50. /// </summary>
  51. protected override ConfigurationPropertyCollection Properties
  52. {
  53. get
  54. {
  55. ConfigurationPropertyCollection properties = base.Properties;
  56. properties.Add(new ConfigurationProperty(SecurityProperty, typeof(MetroSecurityElement)));
  57. properties.Add(new ConfigurationProperty(ReliableSessionProperty, typeof(MetroReliableSessionElement)));
  58. return properties;
  59. }
  60. }
  61. /// <summary>
  62. /// Gets the binding element implementation type
  63. /// </summary>
  64. protected override Type BindingElementType
  65. {
  66. get { return typeof(MetroBinding); }
  67. }
  68. /// <summary>
  69. /// Initializes this configuration element from an existing binding instance
  70. /// </summary>
  71. /// <param name="binding">Binding instance</param>
  72. protected override void InitializeFrom(Binding binding)
  73. {
  74. base.InitializeFrom(binding);
  75. MetroBinding metroBinding = (MetroBinding)binding;
  76. this.ReliableSession.InitializeFrom(metroBinding.ReliableSession);
  77. this.Security.InitializeFrom(metroBinding.Security);
  78. }
  79. /// <summary>
  80. /// Applies this configuration element to an existing binding instance
  81. /// </summary>
  82. /// <param name="binding">Binding instance</param>
  83. protected override void OnApplyConfiguration(Binding binding)
  84. {
  85. base.OnApplyConfiguration(binding);
  86. MetroBinding metroBinding = (MetroBinding)binding;
  87. this.ReliableSession.ApplyConfiguration(metroBinding.ReliableSession);
  88. this.Security.ApplyConfiguration(metroBinding.Security);
  89. if (this.ReliableSession.Enabled)
  90. {
  91. metroBinding.Security.EstablishSecurityContext = true;
  92. }
  93. }
  94. }
  95. }