Как использовать сервис mex в WCF, который требует аутентификации имени пользователя? - PullRequest
2 голосов
/ 13 февраля 2012

Я создал веб-сервис на основе TCP, который предоставляет конечную точку mex. Недавно я добавил аутентификацию пользователя через

        var tcpbinding = new NetTcpBinding(SecurityMode.TransportWithMessageCredential, true);
        tcpbinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
        svh.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new BWUserNamePasswordValidator();
        svh.Credentials.UserNameAuthentication.UserNamePasswordValidationMode =UserNamePasswordValidationMode.Custom;
        svh.Credentials.ServiceCertificate.Certificate = TcpBindingCertificate;

Теперь, когда я пытаюсь обновить ссылку на службу в клиентском проекте, я получаю сообщение об ошибке о метаданных, содержащих ссылку, которая не может быть разрешена. Когда код безопасности удален, мекс работает нормально

Вот код для конечной точки mex:

        // Check to see if the service host already has a ServiceMetadataBehavior
        ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>();
        // If not, add one
        if (smb == null)
            smb = new ServiceMetadataBehavior();
        //smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        svh.Description.Behaviors.Add(smb);

        // Add MEX endpoint
        svh.AddServiceEndpoint(
          ServiceMetadataBehavior.MexContractName,
          MetadataExchangeBindings.CreateMexTcpBinding(),
          location+"/mex"
        );

Почему я получаю это и как это можно исправить?

...