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

问题描述:

我想在Silverlight客户端和Java服务器之间建立一个Web服务。为了进行身份验证,我需要从Silverlight客户端发送用户名令牌(用户名/密码)。由于这是一个概念验证,我想保持简单并使用HTTP作为传输层。然而,它看起来像Silverlight只支持通过HTTPS的用户名令牌(Visual Studio无法从我的Java服务器中通过HTTP执行用户名令牌消化WSDL)。从Silverlight客户端添加自定义SOAP标头

所以我的问题是:我怎样才能在我的Silverlight客户端发送的SOAP头中添加用户名/密码信息 - 仍然使用basicHttpBinding和HTTP?它不必符合WS-Security标准。这样简单的事情就足够我的应用程序:

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

看看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))); 
+1

感谢TJ。这就像一个魅力!我做的唯一不同的是通过一个行为而不是BasicHttpMessageInspectorBinding添加检查器。 – Naresh 2011-02-13 06:26:29