У меня есть служба WCF, использующая как BasicHttpBinding, так и NetTcpBinding на разных конечных точках в одном ServiceHost. NetTcp использует самоподписанный сертификат, который загружается из файла, все было хорошо, пока я не попытался использовать BasicHttpBinding, поэтому я делаю:
На сервере:
var ServiceHost host = new ServiceHost(blah blah);
host.Credentials.ServiceCertificate.Certificate = GetCertificate(); //load a certificate from file
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
var httpBinding = new BasicHttpBinding();
httpBinding.Security.Mode = BasicHttpSecurityMode.Transport;
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
На клиенте:
ChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
var cer = GetCertificate();
ChannelFactory.Credentials.ClientCertificate.Certificate = cer;
var httpBinding = new BasicHttpBinding();
httpBinding.Security.Mode = BasicHttpSecurityMode.Transport;
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
//accept any cert
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
Однако при подключении я получил эту ошибку
Исключение. Произошла ошибка при выполнении HTTP-запроса к https://localhost/MyService. Это может быть связано с тем, что сертификат сервера не настроен должным образом с помощью HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.
сертификат не установлен, и он отлично работал с привязкой net tcp, наверное, я что-то пропустил?
Я заметил одну вещь: net.tcp - это дуплексный канал, а базовый http - симплексный, я уверен, что есть разница в настройке? Например, мне нужно было загрузить сертификат на обоих концах для net.tcp, что тогда происходит с базовым http?
заранее спасибо