我正在开发客户端应用程序以利用 SOAP 网络服务。添加了 SOAP Web 服务作为服务引用。它连接到 IBM 服务器,服务器需要 WS-Security 基本身份验证。
使用默认设置调用并出现错误(无身份验证 header )
修改后的代码如下所示:
var service = new RealTimeOnlineClient();
service.ClientCredentials.UserName.UserName = "xxxxx";
service.ClientCredentials.UserName.Password = "yyyyy";
现在,当我查看 Fiddler 中的响应时 - 工作正常(我从服务器获得预期的信封),我得到了正确的信封。
但是,我从 WCF 得到异常:
安全处理器无法在邮件中找到安全 header 。这可能是因为消息是不安全的错误,或者是因为通信双方之间的绑定(bind)不匹配。如果为安全配置了服务并且客户端未使用安全性,则可能会发生这种情况。
SO 上的快速搜索和一堆答案让我找到了 Microsoft 的 HotFix,他们在其中添加了新属性 EnableUnsecuredResponse
。问题是 - 我无法弄清楚在我的代码或配置中应用此属性的位置。添加到 web.config 中的 security
标记不起作用(错误无法找到属性)。
我了解 .NET 3.5 的修补程序和 2009-2010 年的大多数问题。它应该已经在 4.5 中了,对吗?如何将此属性应用于我的代码?
最佳答案
我必须添加以下代码来更改“EnableUnsecureResponse”的值
var service = new RealTimeOnlineClient();
service.ClientCredentials.UserName.UserName = "xxxxx";
service.ClientCredentials.UserName.Password = "yyyyy";
var elements = service.Endpoint.Binding.CreateBindingElements();
elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true;
service.Endpoint.Binding = new CustomBinding(elements);
关于c# - .NET 4.5 中的 WCF 不安全响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712708/