Сервис зависает при подключении

Аутентификация в WCF-приложении происходит по механизму UserName. Система зависает при вызове методов сервиса. Затем выдаётся ошибка о том, за промежуток времени не удалось завершить согласование безопасности. При этом подключение к сервису есть. Привязка - wsDualHttpBinding. Проект размещен в облачной службе Azure. Web.config:

<serviceCredentials>            
<userNameAuthentication
            userNamePasswordValidationMode="Custom"
            customUserNamePasswordValidatorType="ProjectManagement_Server.CustomUserNameValidator, ProjectManagement_Server"/>
<serviceCertificate 
  findValue="4EDC883490C36916B78C59E0A5013E7F3DA0918E"
  storeLocation="LocalMachine"
  storeName="My"
  x509FindType="FindByThumbprint"/>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="ProjectManagement_Server.CustomX509CertificateValidator, ProjectManagement_Server"/>
</clientCertificate>
</serviceCredentials>
...
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>

CustomUserNameValidator.cs:

public class CustomUserNameValidator : UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        if (!(userName == "user" && password == "pass"))
        {
            throw new FaultException("Неверный логин или пароль");
        }
    }
}

CustomX509CertificateValidator.cs:

public class CustomX509CertificateValidator : X509CertificateValidator
{        
    public override void Validate(X509Certificate2 certificate)
    {
        if (certificate == null)
            throw new ArgumentNullException("certificate");

        if (certificate.Subject != certificate.Issuer)
            throw new SecurityTokenException("Certificate is not self-issued");
    }
}

Ответы (1 шт):

Автор решения: Александр Пертенава

На сколько я понял, проблема в том, что wsDualHttpBinding создаёт двустороннюю связь: клиент-сервер и наоборот. Главная проблема именно в обратной связи. Роутер, файервол не позволят сделать это просто так. Необходимо открывать порты. Это можно сделать далеко не во всех случаях. Поэтому в данном случае нужно переходить на netTcpBinding...

→ Ссылка