处理Web服务中的非对称标头

时间:2014-11-08 04:19:17

标签: c# web-services wcf

晚上好,

我正在将一些遗留的.NET 2代码移动到.NET 4.在这个项目的一个小角落里,有一个WSE调用由第三方运行的SOAP Web服务。该服务很古怪 - 它使用UserToken身份验证,这很好,但它的工作方式似乎不适合WCF。

我的第一种方法是将绑定配置为使用TransportWithMessageCredential并通过<clientName>.ClientCredentials.UserName设置用户名/密码。在运行时,这引发了一个异常,表明响应中缺少安全性。在与Fiddler进行一些调查之后,我发现当我发送UserToken标头时,但是服务的响应中没有安全标头。 WCF认为格式化无效并引发异常。

作为一项实验,我将绑定切换为使用Transport安全性,并在端点配置中添加了<headers>...</headers>块,基本上是对凭据进行硬编码。这很有效,WCF很满意,因为它没有尝试验证消息凭据。

我正处于工作原型的地步,但从设计的角度来看,我真的不满意,但我不知道能找到更好的解决方案。

是否有办法(1)配置服务以便它发送UserToken但不需要返回安全块,或者(2)在代码中注入SOAP头,因此它更具动态性把它放在配置中?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先使用WCF BindingBox将您的基本http绑定转换为自定义绑定。然后在自定义绑定的安全元素上添加:

enableUnsecuredResponse="true"