从Silverlight客户端添加自定义SOAP标头

时间:2011-02-07 19:47:34

标签: silverlight wcf soap username ws-security

我正在尝试在Silverlight客户端和Java服务器之间设置Web服务。我需要从Silverlight客户端发送用户名令牌(用户名/密码)以进行身份​​验证。由于这是一个概念验证,我想保持简单并使用HTTP作为我的传输层。但是,看起来Silverlight仅支持HTTPS上的用户名令牌(Visual Studio无法从我的Java服务器中消化通过HTTP进行用户名令牌的WSDL)。

所以我的问题是:如何在我的Silverlight客户端发送的SOAP头中添加用户名/密码信息 - 仍然使用basicHttpBinding和HTTP?它不必与WS-Security兼容。像这样简单的东西就足以满足我的申请:

<soapenv:Header>
    <UsernameToken>
        <Username>john</Username>
        <Password>cool</Password>
    </UsernameToken>
</soapenv:Header>

1 个答案:

答案 0 :(得分:2)

查看IClientMessageInspector。在BeforeSendRequest方法中,您可以添加用户名/密码:

public object BeforeSendRequest(ref Message request, System.ServiceModel.IClientChannel channel)
{
    request.Headers.Add(MessageHeader.CreateHeader("username", "", "user"));
    request.Headers.Add(MessageHeader.CreateHeader("password", "", "pass"));
    return null;
}

您必须将此添加到您的绑定中:

BasicHttpMessageInspectorBinding binding = new BasicHttpMessageInspectorBinding(new MessageInspector());
var myWs= new MyWsClient(binding, new EndpointAddress(new Uri(Uri)));