我正在尝试在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>
答案 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)));