WSAddressing10ProblemHeaderQNameFault.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel
  5. {
  6. using System.Globalization;
  7. using System.Xml;
  8. using System.ServiceModel;
  9. using System.ServiceModel.Channels;
  10. using System.Text;
  11. using System.Collections.Generic;
  12. using System.Runtime.Serialization;
  13. using System.ServiceModel.Diagnostics;
  14. class WSAddressing10ProblemHeaderQNameFault : MessageFault
  15. {
  16. FaultCode code;
  17. FaultReason reason;
  18. string actor;
  19. string node;
  20. string invalidHeaderName;
  21. public WSAddressing10ProblemHeaderQNameFault(MessageHeaderException e)
  22. {
  23. this.invalidHeaderName = e.HeaderName;
  24. if (e.IsDuplicate)
  25. {
  26. this.code = FaultCode.CreateSenderFaultCode(
  27. new FaultCode(Addressing10Strings.InvalidAddressingHeader,
  28. AddressingVersion.WSAddressing10.Namespace,
  29. new FaultCode(Addressing10Strings.InvalidCardinality,
  30. AddressingVersion.WSAddressing10.Namespace)));
  31. }
  32. else
  33. {
  34. this.code = FaultCode.CreateSenderFaultCode(
  35. new FaultCode(Addressing10Strings.MessageAddressingHeaderRequired,
  36. AddressingVersion.WSAddressing10.Namespace));
  37. }
  38. this.reason = new FaultReason(e.Message, CultureInfo.CurrentCulture);
  39. this.actor = "";
  40. this.node = "";
  41. }
  42. public WSAddressing10ProblemHeaderQNameFault(ActionMismatchAddressingException e)
  43. {
  44. this.invalidHeaderName = AddressingStrings.Action;
  45. this.code = FaultCode.CreateSenderFaultCode(
  46. new FaultCode(Addressing10Strings.ActionMismatch, AddressingVersion.WSAddressing10.Namespace));
  47. this.reason = new FaultReason(e.Message, CultureInfo.CurrentCulture);
  48. this.actor = "";
  49. this.node = "";
  50. }
  51. public override string Actor
  52. {
  53. get
  54. {
  55. return actor;
  56. }
  57. }
  58. public override FaultCode Code
  59. {
  60. get
  61. {
  62. return code;
  63. }
  64. }
  65. public override bool HasDetail
  66. {
  67. get
  68. {
  69. return true;
  70. }
  71. }
  72. public override string Node
  73. {
  74. get
  75. {
  76. return node;
  77. }
  78. }
  79. public override FaultReason Reason
  80. {
  81. get
  82. {
  83. return reason;
  84. }
  85. }
  86. protected override void OnWriteDetail(XmlDictionaryWriter writer, EnvelopeVersion version)
  87. {
  88. if (version == EnvelopeVersion.Soap12) // Soap11 wants the detail in the header
  89. {
  90. OnWriteStartDetail(writer, version);
  91. OnWriteDetailContents(writer);
  92. writer.WriteEndElement();
  93. }
  94. }
  95. protected override void OnWriteDetailContents(XmlDictionaryWriter writer)
  96. {
  97. writer.WriteStartElement(Addressing10Strings.ProblemHeaderQName, AddressingVersion.WSAddressing10.Namespace);
  98. writer.WriteQualifiedName(this.invalidHeaderName, AddressingVersion.WSAddressing10.Namespace);
  99. writer.WriteEndElement();
  100. }
  101. public void AddHeaders(MessageHeaders headers)
  102. {
  103. if (headers.MessageVersion.Envelope == EnvelopeVersion.Soap11)
  104. {
  105. headers.Add(new WSAddressing10ProblemHeaderQNameHeader(this.invalidHeaderName));
  106. }
  107. }
  108. class WSAddressing10ProblemHeaderQNameHeader : MessageHeader
  109. {
  110. string invalidHeaderName;
  111. public WSAddressing10ProblemHeaderQNameHeader(string invalidHeaderName)
  112. {
  113. this.invalidHeaderName = invalidHeaderName;
  114. }
  115. public override string Name
  116. {
  117. get { return Addressing10Strings.FaultDetail; }
  118. }
  119. public override string Namespace
  120. {
  121. get { return AddressingVersion.WSAddressing10.Namespace; }
  122. }
  123. protected override void OnWriteStartHeader(XmlDictionaryWriter writer, MessageVersion messageVersion)
  124. {
  125. writer.WriteStartElement(this.Name, this.Namespace);
  126. }
  127. protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
  128. {
  129. writer.WriteStartElement(Addressing10Strings.ProblemHeaderQName, this.Namespace);
  130. writer.WriteQualifiedName(this.invalidHeaderName, this.Namespace);
  131. writer.WriteEndElement();
  132. }
  133. }
  134. }
  135. }