可能有一种更聪明的方法,但是您可以像这样手动添加标题:
var client = new IdentityProofingService.IdentityProofingWSClient();using (new OperationContextScope(client.InnerChannel)){ OperationContext.Current.OutgoingMessageHeaders.Add( new SecurityHeader("UsernameToken-49", "12345/userID", "password123")); client.invokeIdentityService(new IdentityProofingRequest());}这
SecurityHeader是一个自定义实现的类,由于我选择使用属性来配置XML序列化,因此还需要一些其他类:
public class SecurityHeader : MessageHeader{ private readonly UsernameToken _usernameToken; public SecurityHeader(string id, string username, string password) { _usernameToken = new UsernameToken(id, username, password); } 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) { XmlSerializer serializer = new XmlSerializer(typeof(UsernameToken)); serializer.Serialize(writer, _usernameToken); }}[XmlRoot(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]public class UsernameToken{ public UsernameToken() { } public UsernameToken(string id, string username, string password) { Id = id; Username = username; Password = new Password() {Value = password}; } [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 string Username { get; set; } [XmlElement] public Password Password { get; set; }}public class Password{ public Password() { Type = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"; } [XmlAttribute] public string Type { get; set; } [XmlText] public string Value { get; set; }}我没有
Nonce在
UsernameTokenXML中添加该位,但是它与XML非常相似
Password。该
Created元素还需要还增加,但它是一个简单的
[XmlElement]。



