2011-02-07 105 views
2

我想在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> 

回答

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

感謝TJ。這就像一個魅力!我做的唯一不同的是通過一個行爲而不是BasicHttpMessageInspectorBinding添加檢查器。 – Naresh 2011-02-13 06:26:29

相關問題