7

标题对象

[Serializable]
[DataContract(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")] // This object serialize specific namespace
public class Security
{
    [DataMember] // This object serialize without namespace
    public UsernameToken UsernameToken;
}


public class UsernameToken : IXmlSerializable
{

    public string Username { get; set; }
    public string Password { get; set; }

    public XmlSchema GetSchema() { return null; }

    public void ReadXml(System.Xml.XmlReader reader)
    {
        reader.MoveToContent();

        Username = reader.ReadElementString("Username");
        reader.ReadStartElement();

        Password = reader.ReadElementString("Password");
        reader.ReadEndElement();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteElementString("Username", Username);
        writer.WriteElementString("Password", Password);
    }
}

设置端点标头

SubscriptionWSImplServiceClient client = new SubscriptionWSImplServiceClient();

//Create wsse security object
Security security = new Security();
UsernameToken usernameToken = new UsernameToken { Password = password, Username = uname };
security.UsernameToken = usernameToken;

//Serialize object to xml
XmlObjectSerializer xmlObjectSerializer = new DataContractSerializer(typeof(Security), "Security", "");

//Create address header with security header
AddressHeader addressHeader = AddressHeader.CreateAddressHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", security, xmlObjectSerializer);

//Create new endpoint with addressHeader that contains security header
EndpointAddress endpoint = new EndpointAddress(new Uri("http://127.0.0.1/mpp/subscriptionService"), new[] { addressHeader });

//Set new endpoint
client.Endpoint.Address = endpoint;
4

0 回答 0