Как добавить заголовок безопасности в сообщение SOAP?

Я пытаюсь использовать WebService, написанный на Java нашим провайдером из нашего приложения C#. Когда пришло время общаться, я получаю это:

WSDoAllReceiver: входящее сообщение не содержит требуемый заголовок безопасности

Со вчерашнего дня я пытаюсь выяснить, как добавить заголовок безопасности в сообщение SOAP.

Да, я читал это (не знаю, как создать заголовок SOAP ;), но это не сработало.

Я оглянулся, и это, кажется, довольно заданный вопрос. Интересно, могу ли я получить некоторую помощь здесь, некоторые указатели, некоторый код, чтобы начать меня.

2 ответа

Решение

Мне действительно удалось добиться этого с помощью WSE. Самое смешное, что веб-службы провайдера не будут работать с WSE 3.0, но они работали с WSE 2.0. Вот шаги

  • Получить WSE 2.0
  • Добавить веб-ссылку на проект
  • В реализации прокси-сервера Web Reference:

замещать

public partial class UserWS : System.Web.Services.Protocols.SoapHttpClientProtocol

от

public partial class UserWS : Microsoft.Web.Services2.WebServicesClientProtocol
  • Перед вызовом веб-службы:

Установите информацию для аутентификации

UsernameToken token = new UsernameToken("user", "pwd", PasswordOption.SendPlainText);
yourProxy.RequestSoapContext.Security.Tokens.Add(token);

И это все! К вашему сведению, поставщик является экземпляром Blackboard.

Попробуй это. Нет необходимости в веб-ссылке и реализации Web.Services2.

            var client = "Your Service Client"; 
            using (var scope = new OperationContextScope(client.InnerChannel))
            {
                System.Xml.XmlDocument document = new XmlDocument();
                XmlElement element = document.CreateElement("wsse", "UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

                XmlElement newChild = null;
                newChild = document.CreateElement("wsse", "Username", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
                newChild.InnerText = "finance";
                element.AppendChild(newChild);

                newChild = document.CreateElement("wsse", "CorporationCode", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
                newChild.InnerText = "387";
                element.AppendChild(newChild);

                MessageHeader messageHeader = MessageHeader.CreateHeader("UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", element, false);

                OperationContext.Current.OutgoingMessageHeaders.Add(messageHeader);

                var result = client.GetCorporations(new CorporationType { pageNo = 1 });
            }
Другие вопросы по тегам