2014-11-08 58 views
0

晚上好,处理不对称头在Web服务

我把一些旧的.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

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

enableUnsecuredResponse="true" 
+0

这很好地工作。谢谢!我很久以前就不会发现这一点。 – Jacob 2014-11-08 19:01:09

+0

一方面说明:发生器发出''这会导致运行时错误;它看起来应该是'messageVersion'。 – Jacob 2014-11-08 19:02:07