I need make a Header for SOAP request. After search, I success to generate my Header request in XML but i need a prefix on my XML tag.
Actually, I have generated this :
<TimeStamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="TimeStamp-2">
<Created>2016-03-22T10:10:55.710Z</Created>
<Expires>2016-03-22T11:10:55.710Z</Expires>
</TimeStamp>
And I need to have that :
<wsu:TimeStamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="TimeStamp-2">
<Created>2016-03-22T10:10:55.710Z</Created>
<Expires>2016-03-22T11:10:55.710Z</Expires>
</wsu:TimeStamp>
I was inspired by this topic (How can I pass a username/password in the header to a SOAP WCF Service) for create my class and generate my XML.
Here, there is my version :
class SecurityHeader : MessageHeader
{
public override string Name
{
get { return "Security"; }
}
public override string Namespace
{
get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; }
}
protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
XmlSerializer serializer1 = new XmlSerializer(typeof(TimeStamp));
serializer1.Serialize(Console.Out, new TimeStamp(), ns);
}
}
[XmlRoot("TimeStamp",Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
public class TimeStamp
{
public TimeStamp()
{
Id = "TimeStamp-2";
Created = new Created() { Value = Created.GenerateTimeStampCreation() };
Expires = new Expires() { Value = Expires.GenerateTimeStampExpiration() };
}
[XmlAttribute(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")]
public string Id { get; set; }
[XmlElement]
public Created Created { get; set; }
[XmlElement]
public Expires Expires { get; set; }
}