【发布时间】:2014-06-17 07:58:29
【问题描述】:
我使用 wsdl.exe 在 C# 中生成一个类来调用 Web 服务。只要此 Web 服务不需要标头,就可以正常工作。 现在我需要添加这样的标题:
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>myUsername</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
所以我添加了一个Security类,里面有UsernameToken类,里面带有Username和Password,并添加到调用类中。捕获发送出去的整个 SOAP 消息的问题可以通过SOAP extension 解决。我可以实现:
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<UsernameToken>
<Username>username</Username>
<Password>verysecret</Password>
</UsernameToken>
</Security>
所以现在我错过了这个wsse 部分和密码标签中的“类型”属性?
如何才能做到这一点?我应该改用[MessageContract] 吗?
或者我可以只是“硬编码”字符串并将其放在标题中吗?
【问题讨论】:
-
需要header的web服务,是WCF还是普通的web服务?
-
这个问题真的是关于标题,还是关于在每个身份验证请求中发送用户名和密码?
-
我会说普通的 Web 服务(EAR 在 WebSphere 上运行)。当然问题最终是发送用户名和密码,但我一步一步来。现在我想看看我要发送什么。
-
@Graffl 如果您只想查看 SOAP 消息以用于学习目的,只需检查您在服务器端收到的原始 SOAP 消息。
-
如果他可以访问服务器...
标签: c# web-services soap