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 работает напрямую с сервером, игнорируя веб сервис?