Добавление пользовательских заголовков SOAP из клиента Silverlight - PullRequest
2 голосов
/ 07 февраля 2011

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

Поэтому мой вопрос таков: как добавить имя пользователяинформация о пароле в заголовке SOAP, отправленная моим клиентом Silverlight - все еще используется basicHttpBinding и HTTP?Он не должен быть совместимым с WS-Security.Для моего приложения будет достаточно чего-то простого:

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

1 Ответ

2 голосов
/ 07 февраля 2011

посмотрите на 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)));
...