我需要开发一个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以便进行响应。