Мне нужно разработать службу asmx для поддержки существующего Java-клиента. Клиент использует заголовки безопасности oasis в запросе и ответе. Перебрав множество блогов, я смог заставить службу принимать заголовки SOAP с безопасностью oasis.
Одна нерешенная проблема остается вокруг ответа. Корневой элемент заголовка ответа такой же, но у него нет одного элемента UsernameToken. Как удалить элемент из заголовка SOAP во время ответа.
Ниже приведены заголовки запроса и ответа.
Запрос SOAP-заголовка:
<s:Header>
<o:Security s:mustUnderstand="1"
xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken u:Id="">
<o:Username>XXXXX</o:Username>
<o:Password>ABCC</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
Заголовок SOAP ответа:
<s:Header>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="">
<u:Created>2018-05-02T02:29:26.662Z</u:Created>
<u:Expires>2018-05-02T02:34:26.662Z</u:Expires>
</u:Timestamp>
</o:Security>
</s:Header>
На данный момент заголовок ответа, сгенерированный службой, содержит элемент UsernameToken в дополнение к элементу Timestamp, который я добавляю при успешном ответе.
Ниже приведен веб-метод.
[WebMethod]
[SoapHeader("Security", Direction = SoapHeaderDirection.InOut)]
ValidateResponse validate()
Security SoapHeader определяется как:
[XmlRoot("Security", Namespace = "http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
public class SecurityHeader : SoapHeader
{
private UsernameTokenHeader _header;
private Timestamp _headerstamp;
[XmlElement("UsernameToken")]
public UsernameTokenHeader Header
{
get { return _header; }
set { _header = value; }
}
[XmlElement("Timestamp", Namespace = "http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")]
public Timestamp HeaderStamp
{
get { return _headerstamp; }
set { _headerstamp = value; }
}
}
Теперь мне нужно удалить UsernameToken из заголовка для ответа.