Сервис хостится в IIS на WS2008
Почему валидатор зацикливается?
Т.е. при ексепшине снова вызывается Validate, а не отправляется "отлуп" юзеру?
я уже разные типы ексепшинов пробовал и SecurityTokenValidationException и FaultException. Юзер получает отказ только через тайаут.
public class GsX509CertificateValidator : X509CertificateValidator
{
public GsX509CertificateValidator()
{
}
public override void Validate(X509Certificate2 certificate)
{
throw new ArgumentNullException("Клиентский сертификат не был предъявлен сервису");
}
}
В отладчике видно что ошибка генерится причем за одно обращение пользователя метод вызывается 6 раз.
Но пользователь волучает не её а просто ошибка таймайта на сокете.
Как быть, нужна именно кастомная валидация
Сама валидация работает, если сертификат предявлен и я его пропускаю (не генерю ексепшин), то юзер заходит, но как корректно давать разворот пользователю, чтобы он не ждал таймаута
Сообщение выглядит так:
####
Подключение к сокету было прервано. Возможно, это вызвано ошибкой обработки сообщения,
превышением времени ожидания на удаленном узле или проблемой с выделенным сетевым ресурсом.
Тайм-аут локального сокета: "00:00:09.9690000".
####
Похоже дело в IIS и net.tcp, так как попробовал "простую" (<authentication certificateValidationMode="PeerTrust" trustedStoreLocation="LocalMachine" />) валидацию, та же фигня (если сертификат подходит то пускает, если нет то висит до таймаута). Только не понятно, это в IIS чегото не доделано или я в настройках не разобрался (хотя весь уже перерыл)