连接WCF服务时遇到问题

时间:2016-10-26 16:59:14

标签: c# wcf wcf-security

我在custom bindinggetting end point address from config下创建,然后尝试向WCF服务发送请求。

BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

var endpointAddress = "";

ClientSection clientSection = (ClientSection)ConfigurationManager.GetSection("system.serviceModel/client");

for (int i = 0; i < clientSection.Endpoints.Count; i++)
{
  if (clientSection.Endpoints[i].Name == "HTTPS_Port")
     endpointAddress = clientSection.Endpoints[i].Address.AbsoluteUri;
}

EndpointAddress address = new EndpointAddress(endpointAddress);
MyWCFService svc = new MyWCFService(binding, address);

我收到以下错误

  

提供的URI方案“https”无效;预期   'http'。\ r \ nParameter name:via“}

1 个答案:

答案 0 :(得分:3)

您没有使用安全模式进行传输。你需要添加

    binding.Security.Mode = BasicHttpSecurityMode.Transport;



 According to definition =>  



//Security is provided using HTTPS. The service must be configured with SSL
    //     certificates. The SOAP message is protected as a whole using HTTPS. The service
    //     is authenticated by the client using the service’s SSL certificate. The client
    //     authentication is controlled through the System.ServiceModel.HttpTransportSecurity.ClientCredentialType.

不要使用

binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

此安全模式仅可用于基于http的客户端。

根据微软的说法  此模式不提供消息完整性和机密性。它提供

//     only HTTP-based client authentication. Use this mode with caution. It should
//     be used in environments where the transfer security is being provided by
//     other means (such as IPSec) and only client authentication is provided by
//     the Windows Communication Foundation (WCF) infrastructure.

注意:托管此服务需要SSL证书。请在IIS中安装。