我正在尝试在这样的BeforeSendRequest
方法中修改自定义标头并将其添加到肥皂消息中:
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
{
MessageHeader header = MessageHeader.CreateHeader("name", "http://myname", "Oscar");
request.Headers.Add(header);
return null;
}
此时一切正常,标题添加到soap标题中,如下所示:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<ActivityId CorrelationId="51efbfdb-2187-45b9-81fc-6a38815d5bed" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">d1351a78-a53a-4d32-ad35-fca6d4262adf</ActivityId>
<name xmlns="http://myname">Oscar</name>
</s:Header>
问题是我想在标题中添加更大的东西,最终结果必须是这样的:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<ActivityId CorrelationId="51efbfdb-2187-45b9-81fc-6a38815d5bed" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">d1351a78-a53a-4d32-ad35-fca6d4262adf</ActivityId>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Username xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">username</wsse:Username>
<wsse:Password xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</s:Header>
有没有办法做到这一点?
PS。请大家:-)不要批评我,我处于以下情况:
添加此用户名和密码身份验证时,您需要结束https
,问题是我尝试通信的这个基于 Java 的 Web 服务处于下http
,我认为它不符合要求,因为根据第三个链接“这被认为是不好的做法通过不安全的连接传递凭据”,但他们解决了它在配置文件中添加标题(我没有成功)。
我也阅读了这些链接并尝试了它们。同样,当从链接 1 和 2 执行操作时,我在 Visual Studio 中遇到了一种异常,上面写着“应该是 https 而不是 http”,这就是我尝试MessageInspectors
使用BeforeSendRequest
方法的原因。