我在custom binding
,getting 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“}
答案 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中安装。