Я бы попробовал установить для ServiceCertificate
и ClientCertificate
одно и то же на клиенте и на сервере. По крайней мере, так я это сделал. Это было какое-то время, но я думаю, что у меня были проблемы, когда был установлен только один сертификат или другой, а не оба.
Изменить для получения дополнительной информации:
В моем случае я использую CustomBinding
вместо WSDualHttpBinding
, но в итоге я использовал один и тот же сертификат для ServiceCertificate и ClientCertificate с обеих сторон (клиент и сервер).
Точнее, у меня есть класс, который расширяет System.ServiceModel.Description.ServiceCredentials
public class MyServiceCredentials : ServiceCredentials
{
public MyServiceCredentials() : base()
{
LoadCertificate();
}
public MyServiceCredentials(MyServiceCredentials other) : base(other)
{
LoadCertificate();
}
private void LoadCertificate()
{
ServiceCertificate.Certificate = _cert;
ClientCertificate.Certificate = _cert;
ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
ClientCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
}
}
И я передаю один из них моему конструктору CustomBinding в реализации клиента и сервера.
В любом случае, я думаю, что поскольку для привязки включена защита Message
, она ожидает, что в обоих направлениях будет защита на уровне сообщений, поэтому для нее требуется сертификат с обеих сторон (ServiceCertificate и ClientCertificate).
Хотя я могу быть совершенно неправ, я просто говорю; попробуйте и посмотрите, поможет ли это ...