我正在开发客户端应用程序以利用SOAP Web服务。添加了 SOAP Web 服务作为服务引用。它连接到 IBM 服务器,服务器需要 WS-Security 基本身份验证。
使用默认设置调用并收到错误(无身份验证标头)
修改后的代码如下所示:
var service = new RealTimeOnlineClient();
service.ClientCredentials.UserName.UserName = "xxxxx";
service.ClientCredentials.UserName.Password = "yyyyy";
现在,当我在 Fiddler 中查看响应时 - 工作正常(我从服务器获得预期的信封),我得到了正确的信封。
但是,我从 WCF 中得到例外:
Security processor was unable to find a security header in the message. This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties. This can occur if the service is configured for security and the client is not using security.
SO上的快速搜索和一堆答案将我指向Hot Microsoft Fix,他们在其中添加了新的属性EnableUnsecuredResponse
。问题是 - 我无法弄清楚在我的代码或配置中应用此属性的位置。在 web.config 中添加security
标记不起作用(错误找不到属性)。
我知道 .NET 3.5 和 2009-2010 年的大多数问题都出现了修补程序。它应该已经在 4.5 中了,对吗?如何将此属性应用于我的代码?
我必须添加以下代码来更改"启用不安全响应"的值
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);