Как добавить заголовок безопасности в сообщение 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 });
}