我正在尝试实现 WCF 客户端。服务器需要 WSSE 标头。
我能够使它与 HTTP 一起工作。但是它不适用于 HTTPS。
我得到了 2 个 URL 进行测试,一个使用 HTTPS,一个使用 HTTP。生产服务器将使用 HTTPS。
我正在使用 CustomBinding 使其与 HTTP 一起使用
下面是绑定代码:
var securityElement = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
securityElement.EnableUnsecuredResponse = true;
securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
var encodingElement = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8);
var transportElement = new HttpTransportBindingElement();
var binding = new CustomBinding(securityElement, encodingElement, transportElement);
return binding;
当我使用 HTTP URL 时效果很好。当我尝试使用相同绑定的 HTTPS 时,我收到此错误:
“‘自定义绑定’。” http://tempuri.org/ 'serviceRequestUpdate_PortType' 的绑定。http://schemas.officedepot.com/ODTechServices/serviceRequestUpdate '合同配置了需要传输级别完整性和机密性的身份验证模式。但是传输不能提供完整性和机密性。”
我也尝试过使用 basichttpbinding 进行 HTTPS 如下:
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
return binding;
现在在这种情况下,我得到以下错误:
“安全处理器无法在消息中找到安全标头。这可能是因为消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。如果为安全配置了服务并且客户端是不使用安全性。”
我注意到进行了实际的 Web 服务调用并执行了操作。似乎在接收响应方面存在问题。我还注意到,当我发出请求时,我传递了时间戳,但响应没有时间戳,这可能会导致绑定不匹配。但是IncludeTimestamp = false
如果我使用basicHttpBinding
.