2011-02-07 4 views
2

Я пытаюсь настроить веб-службу между клиентом Silverlight и сервером Java. Мне нужно отправить токены пользователя (имя пользователя/пароль) из клиента Silverlight для аутентификации. Поскольку это доказательство концепции, я хочу, чтобы все упростилось и использовало HTTP как мой транспортный уровень. Однако похоже, что Silverlight поддерживает токены пользователя по HTTPS (Visual Studio не может переварить WSDL с моего Java-сервера, который использует токены пользователя по HTTP).Добавление пользовательских заголовков SOAP из клиента Silverlight

Итак, мой вопрос заключается в следующем: как я могу добавить имя пользователя/пароль в заголовок SOAP, отправленный моим клиентом Silverlight, - все еще используя 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

Смежные вопросы