WCF 401 Удаленный сервер возвратил ошибку "Несанкционированный"

Я учусь работать с веб-сервисами в с#. Написал следующий код для работы с одним сервисом.

BasicHttpsBinding basicHttpsBinding = new BasicHttpsBinding();
basicHttpsBinding.Security.Mode = BasicHttpsSecurityMode.TransportWithMessageCredential;
basicHttpsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
   
Uri uri = new Uri(path);
ServiceHost host = new ServiceHost(typeof(SimpleService), uri);
try
{
    host.Authentication.AuthenticationSchemes = authenticationSchemes;
    ServiceMetadataBehavior metadata
      = host.Description.Behaviors.Find<ServiceMetadataBehavior>();

    if (metadata == null)
        metadata = new ServiceMetadataBehavior();

    metadata.HttpGetEnabled = true;
    host.Description.Behaviors.Add(metadata);
    host.AddServiceEndpoint(
      ServiceMetadataBehavior.MexContractName,
      basicHttpsBinding,   
      uri
    );

    GetMetaData(host.Description.Endpoints[0]);
}

В этом методе, я пытаюсь загрузить метаданные.

public static void GetMetaData(ServiceEndpoint serviceEndpoint)
{
    MetadataExchangeClient Client = new MetadataExchangeClient(serviceEndpoint.Binding);              
    
    Client.HttpCredentials = new NetworkCredential(login, password, path);
    Client.SoapCredentials.UserName.UserName = login;
    Client.SoapCredentials.UserName.Password = password;

    MetadataSet metadataSet = Client.GetMetadata(serviceEndpoint.Address);
}

У меня выдает следующее исключение. Для любой схемы

"Запрос HTTP не разрешен для схемы аутентификации клиента "Ntlm". От сервера получен заголовок аутентификации "Basic realm=""". ---> System.Net.WebException: Удаленный сервер возвратил ошибку: (401) Несанкционированный."

выдает при попытке обратиться к сервису.

MetadataSet metadataSet = Client.GetMetadata(serviceEndpoint.Address);

Как я понимаю, мои логин и пароль не передаются на сервис. И поэтому выдает ошибку 401. Как их передать я не понимаю. Я пробовал подключиться через WebRequest и передать логин и пароль. И у меня получилось. Но писать свои поля и методы для каждого сервиса не разумно. Сервисов будет около 20.

И еще хотел узнать про такую фразу. Metadata publishing for this service is currently disabled. Не означает ли это, что сервис закрыт для публикаций. А то что я смог подключиться через httpRequest, просто потому что httpRequest работает напрямую с сервером, игнорируя веб сервис?


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