WSDualHttpSecurity.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel
  5. {
  6. using System.Runtime;
  7. using System.ServiceModel.Channels;
  8. using System.ServiceModel.Configuration;
  9. using System.ComponentModel;
  10. public sealed class WSDualHttpSecurity
  11. {
  12. static readonly MessageSecurityVersion WSDualMessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
  13. internal const WSDualHttpSecurityMode DefaultMode = WSDualHttpSecurityMode.Message;
  14. WSDualHttpSecurityMode mode;
  15. MessageSecurityOverHttp messageSecurity;
  16. public WSDualHttpSecurity()
  17. : this(DefaultMode, new MessageSecurityOverHttp())
  18. {
  19. }
  20. WSDualHttpSecurity(WSDualHttpSecurityMode mode, MessageSecurityOverHttp messageSecurity)
  21. {
  22. Fx.Assert(WSDualHttpSecurityModeHelper.IsDefined(mode), string.Format("Invalid WSDualHttpSecurityMode value: {0}", mode.ToString()));
  23. this.mode = mode;
  24. this.messageSecurity = messageSecurity == null ? new MessageSecurityOverHttp() : messageSecurity;
  25. }
  26. public WSDualHttpSecurityMode Mode
  27. {
  28. get { return this.mode; }
  29. set
  30. {
  31. if (!WSDualHttpSecurityModeHelper.IsDefined(value))
  32. {
  33. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
  34. }
  35. this.mode = value;
  36. }
  37. }
  38. public MessageSecurityOverHttp Message
  39. {
  40. get { return this.messageSecurity; }
  41. set
  42. {
  43. this.messageSecurity = (value == null) ? new MessageSecurityOverHttp() : value;
  44. }
  45. }
  46. internal SecurityBindingElement CreateMessageSecurity()
  47. {
  48. if (this.mode == WSDualHttpSecurityMode.Message)
  49. {
  50. return this.messageSecurity.CreateSecurityBindingElement(false, true, WSDualMessageSecurityVersion);
  51. }
  52. else
  53. {
  54. return null;
  55. }
  56. }
  57. internal static bool TryCreate(SecurityBindingElement sbe, out WSDualHttpSecurity security)
  58. {
  59. security = null;
  60. if (sbe == null)
  61. security = new WSDualHttpSecurity(WSDualHttpSecurityMode.None, null);
  62. else
  63. {
  64. MessageSecurityOverHttp messageSecurity;
  65. if (!MessageSecurityOverHttp.TryCreate(sbe, false, true, out messageSecurity))
  66. return false;
  67. security = new WSDualHttpSecurity(WSDualHttpSecurityMode.Message, messageSecurity);
  68. }
  69. // the last check: make sure that security binding element match the incoming security
  70. return SecurityElement.AreBindingsMatching(security.CreateMessageSecurity(), sbe);
  71. }
  72. internal bool InternalShouldSerialize()
  73. {
  74. return this.ShouldSerializeMode()
  75. || this.ShouldSerializeMessage();
  76. }
  77. [EditorBrowsable(EditorBrowsableState.Never)]
  78. public bool ShouldSerializeMode()
  79. {
  80. return this.Mode != DefaultMode;
  81. }
  82. [EditorBrowsable(EditorBrowsableState.Never)]
  83. public bool ShouldSerializeMessage()
  84. {
  85. return this.Message.InternalShouldSerialize();
  86. }
  87. }
  88. }