如何从服务响应的SOAP标头中删除UsernameToken元素

时间:2019-04-18 05:54:50

标签: c# soap asmx

我需要开发一个asmx服务来支持现有的Java客户端。客户端在请求和响应中使用绿洲安全标头。引用了许多博客之后,我能够使该服务接受具有绿洲安全性的SOAP标头。 尚未解决的问题仍然是回应。响应标头的根元素相同,但没有一个元素UsernameToken。在响应过程中如何从SOAP 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">
<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>

到目前为止,由服务生成的响应头除了在成功响应时添加的Timestamp元素外,还包含UsernameToken元素。

下面是Web方法。

[WebMethod]
[SoapHeader("Security", Direction = SoapHeaderDirection.InOut)]
ValidateResponse validate()

安全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以便进行响应。

0 个答案:

没有答案