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