Как добавить заголовок безопасности в сообщение SOAP? - PullRequest
7 голосов
/ 29 апреля 2011

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

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

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

Да, я прочитал это ( Не знаю, как создать SOAPheader ), но это не сработало.

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

Ответы [ 2 ]

14 голосов
/ 04 мая 2011

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

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

Заменить

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 instance.

1 голос
/ 09 ноября 2018

Попробуй это.Нет необходимости в веб-ссылке и реализации 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 });
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...