e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
156 lines
4.9 KiB
C#
156 lines
4.9 KiB
C#
//------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------
|
|
|
|
namespace System.ServiceModel
|
|
{
|
|
using System.Globalization;
|
|
using System.Xml;
|
|
using System.ServiceModel;
|
|
using System.ServiceModel.Channels;
|
|
using System.Text;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.Serialization;
|
|
using System.ServiceModel.Diagnostics;
|
|
|
|
class WSAddressing10ProblemHeaderQNameFault : MessageFault
|
|
{
|
|
FaultCode code;
|
|
FaultReason reason;
|
|
string actor;
|
|
string node;
|
|
string invalidHeaderName;
|
|
|
|
public WSAddressing10ProblemHeaderQNameFault(MessageHeaderException e)
|
|
{
|
|
this.invalidHeaderName = e.HeaderName;
|
|
|
|
if (e.IsDuplicate)
|
|
{
|
|
this.code = FaultCode.CreateSenderFaultCode(
|
|
new FaultCode(Addressing10Strings.InvalidAddressingHeader,
|
|
AddressingVersion.WSAddressing10.Namespace,
|
|
new FaultCode(Addressing10Strings.InvalidCardinality,
|
|
AddressingVersion.WSAddressing10.Namespace)));
|
|
}
|
|
else
|
|
{
|
|
this.code = FaultCode.CreateSenderFaultCode(
|
|
new FaultCode(Addressing10Strings.MessageAddressingHeaderRequired,
|
|
AddressingVersion.WSAddressing10.Namespace));
|
|
}
|
|
|
|
this.reason = new FaultReason(e.Message, CultureInfo.CurrentCulture);
|
|
this.actor = "";
|
|
this.node = "";
|
|
}
|
|
|
|
public WSAddressing10ProblemHeaderQNameFault(ActionMismatchAddressingException e)
|
|
{
|
|
this.invalidHeaderName = AddressingStrings.Action;
|
|
this.code = FaultCode.CreateSenderFaultCode(
|
|
new FaultCode(Addressing10Strings.ActionMismatch, AddressingVersion.WSAddressing10.Namespace));
|
|
this.reason = new FaultReason(e.Message, CultureInfo.CurrentCulture);
|
|
this.actor = "";
|
|
this.node = "";
|
|
}
|
|
|
|
public override string Actor
|
|
{
|
|
get
|
|
{
|
|
return actor;
|
|
}
|
|
}
|
|
|
|
public override FaultCode Code
|
|
{
|
|
get
|
|
{
|
|
return code;
|
|
}
|
|
}
|
|
|
|
public override bool HasDetail
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public override string Node
|
|
{
|
|
get
|
|
{
|
|
return node;
|
|
}
|
|
}
|
|
|
|
public override FaultReason Reason
|
|
{
|
|
get
|
|
{
|
|
return reason;
|
|
}
|
|
}
|
|
|
|
protected override void OnWriteDetail(XmlDictionaryWriter writer, EnvelopeVersion version)
|
|
{
|
|
if (version == EnvelopeVersion.Soap12) // Soap11 wants the detail in the header
|
|
{
|
|
OnWriteStartDetail(writer, version);
|
|
OnWriteDetailContents(writer);
|
|
writer.WriteEndElement();
|
|
}
|
|
}
|
|
|
|
protected override void OnWriteDetailContents(XmlDictionaryWriter writer)
|
|
{
|
|
writer.WriteStartElement(Addressing10Strings.ProblemHeaderQName, AddressingVersion.WSAddressing10.Namespace);
|
|
writer.WriteQualifiedName(this.invalidHeaderName, AddressingVersion.WSAddressing10.Namespace);
|
|
writer.WriteEndElement();
|
|
}
|
|
|
|
public void AddHeaders(MessageHeaders headers)
|
|
{
|
|
if (headers.MessageVersion.Envelope == EnvelopeVersion.Soap11)
|
|
{
|
|
headers.Add(new WSAddressing10ProblemHeaderQNameHeader(this.invalidHeaderName));
|
|
}
|
|
}
|
|
|
|
class WSAddressing10ProblemHeaderQNameHeader : MessageHeader
|
|
{
|
|
string invalidHeaderName;
|
|
|
|
public WSAddressing10ProblemHeaderQNameHeader(string invalidHeaderName)
|
|
{
|
|
this.invalidHeaderName = invalidHeaderName;
|
|
}
|
|
|
|
public override string Name
|
|
{
|
|
get { return Addressing10Strings.FaultDetail; }
|
|
}
|
|
|
|
public override string Namespace
|
|
{
|
|
get { return AddressingVersion.WSAddressing10.Namespace; }
|
|
}
|
|
|
|
protected override void OnWriteStartHeader(XmlDictionaryWriter writer, MessageVersion messageVersion)
|
|
{
|
|
writer.WriteStartElement(this.Name, this.Namespace);
|
|
}
|
|
|
|
protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
|
|
{
|
|
writer.WriteStartElement(Addressing10Strings.ProblemHeaderQName, this.Namespace);
|
|
writer.WriteQualifiedName(this.invalidHeaderName, this.Namespace);
|
|
writer.WriteEndElement();
|
|
}
|
|
}
|
|
}
|
|
}
|