晚上好,
我正在将一些遗留的.NET 2代码移动到.NET 4.在这个项目的一个小角落里,有一个WSE调用由第三方运行的SOAP Web服务。该服务很古怪 - 它使用UserToken
身份验证,这很好,但它的工作方式似乎不适合WCF。
我的第一种方法是将绑定配置为使用TransportWithMessageCredential
并通过<clientName>.ClientCredentials.UserName
设置用户名/密码。在运行时,这引发了一个异常,表明响应中缺少安全性。在与Fiddler进行一些调查之后,我发现当我发送UserToken
标头时,但是服务的响应中没有安全标头。 WCF认为格式化无效并引发异常。
作为一项实验,我将绑定切换为使用Transport
安全性,并在端点配置中添加了<headers>...</headers>
块,基本上是对凭据进行硬编码。这很有效,WCF很满意,因为它没有尝试验证消息凭据。
我正处于工作原型的地步,但从设计的角度来看,我真的不满意,但我不知道能找到更好的解决方案。
是否有办法(1)配置服务以便它发送UserToken
但不需要返回安全块,或者(2)在代码中注入SOAP头,因此它更具动态性把它放在配置中?
谢谢!
答案 0 :(得分:1)
首先使用WCF BindingBox将您的基本http绑定转换为自定义绑定。然后在自定义绑定的安全元素上添加:
enableUnsecuredResponse="true"