WCF自定义绑定或basichttpbinding

时间:2013-08-14 11:26:29

标签: c# .net wcf web-services

我正在尝试实现WCF客户端。服务器需要WSSE标头。

我能够使用HTTP。但它不适用于HTTPS。

我获得了2个测试网址,一个使用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时,我收到此错误:

“'CustomBinding'。'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

1 个答案:

答案 0 :(得分:2)

我得到了答案只需要更改var transportElement = new HttpTransportBindingElement(); to var transportElement = new HttpsTransportBindingElement();并使用自定义绑定