Как удалить элемент UsernameToken из заголовка SOAP ответа службы - PullRequest
1 голос
/ 18 апреля 2019

Мне нужно разработать службу 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 из заголовка для ответа.

...