ContentOnlyMessage.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //----------------------------------------------------------------------------
  4. namespace System.ServiceModel.Channels
  5. {
  6. using System;
  7. using System.ServiceModel;
  8. using System.IO;
  9. using System.ServiceModel.Diagnostics;
  10. using System.Xml;
  11. /// <summary>
  12. /// Base class for non-SOAP messages
  13. /// </summary>
  14. abstract class ContentOnlyMessage : Message
  15. {
  16. MessageHeaders headers;
  17. MessageProperties properties;
  18. protected ContentOnlyMessage()
  19. {
  20. this.headers = new MessageHeaders(MessageVersion.None);
  21. }
  22. public override MessageHeaders Headers
  23. {
  24. get
  25. {
  26. if (IsDisposed)
  27. {
  28. #pragma warning suppress 56503 // [....], required by base class contract
  29. throw TraceUtility.ThrowHelperError(CreateMessageDisposedException(), this);
  30. }
  31. return this.headers;
  32. }
  33. }
  34. public override MessageProperties Properties
  35. {
  36. get
  37. {
  38. if (IsDisposed)
  39. {
  40. #pragma warning suppress 56503 // [....], required by base class contract
  41. throw TraceUtility.ThrowHelperError(CreateMessageDisposedException(), this);
  42. }
  43. if (this.properties == null)
  44. {
  45. this.properties = new MessageProperties();
  46. }
  47. return this.properties;
  48. }
  49. }
  50. public override MessageVersion Version
  51. {
  52. get
  53. {
  54. return headers.MessageVersion;
  55. }
  56. }
  57. protected override void OnBodyToString(XmlDictionaryWriter writer)
  58. {
  59. OnWriteBodyContents(writer);
  60. }
  61. }
  62. class StringMessage : ContentOnlyMessage
  63. {
  64. string data;
  65. public StringMessage(string data)
  66. : base()
  67. {
  68. this.data = data;
  69. }
  70. public override bool IsEmpty
  71. {
  72. get
  73. {
  74. return String.IsNullOrEmpty(this.data);
  75. }
  76. }
  77. protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
  78. {
  79. if (data != null && data.Length > 0)
  80. {
  81. writer.WriteElementString("BODY", data);
  82. }
  83. }
  84. }
  85. class NullMessage : StringMessage
  86. {
  87. public NullMessage()
  88. : base(string.Empty)
  89. {
  90. }
  91. }
  92. }