Извините, ответ был найден при наборе текста
Я пытаюсь подключиться к внешнему веб-сервису, который требует аутентификации по имени пользователя и паролю через прокси. Я использую Visual Studio Express 2008 для создания ссылки на службу
Так что моя мысль была бы возьмите эту ссылку, укажите ее на исправьте веб-сервис и добавьте аутентификация.
Конфигурация, которую я использую без защиты:
<?xml version = "1.0" encoding = "utf-8" ?>
<configuration>
<system.net>
<defaultProxy useDefaultCredentials = "true">
<proxy bypassonlocal = "False" proxyaddress = "http://***.***.****:80" />
</defaultProxy>
</system.net>
<system.serviceModel>
<bindings>
<customBinding>
<binding name = "AreaWebServiceSoap12">
<textMessageEncoding maxReadPoolSize = "64" maxWritePoolSize = "16"
messageVersion = "Soap12" writeEncoding = "utf-8">
<readerQuotas maxDepth = "32" maxStringContentLength = "8192" maxArrayLength = "16384"
maxBytesPerRead = "4096" maxNameTableCharCount = "16384" />
</textMessageEncoding>
<httpTransport manualAddressing = "false" maxBufferPoolSize = "524288"
maxReceivedMessageSize = "65536" allowCookies = "false" authenticationScheme = "Anonymous"
bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard"
keepAliveEnabled = "true" maxBufferSize = "65536" proxyAuthenticationScheme = "Anonymous"
realm = "" transferMode = "Buffered" unsafeConnectionNtlmAuthentication = "false"
useDefaultWebProxy = "true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address = "http://www.****.*****.****.com/samplewebservice/service.asmx"
binding = "customBinding" bindingConfiguration = "AreaWebServiceSoap12"
contract = "ServiceReference1.ServiceSoap" name = "ServiceSoap" />
</client>
</system.serviceModel>
</configuration>
Я добавил следующий код к моему вызову для аутентификации:
static void Main(string[] args)
{
ServiceSoapClient s = new ServiceSoapClient();
s.ClientCredentials.UserName.UserName = @"username";
s.ClientCredentials.UserName.Password = @"password";
Service.RawGpsData[] result = s.GetRawGpsData(0);
Console.WriteLine(String.Format("done:{0}",result.Length));
Console.ReadLine();
}
Простое использование этой настройки дает ожидаемую ошибку:
HTTP-запрос не авторизован со схемой аутентификации клиента Anonymous. Получен заголовок аутентификации от сервера, NTLM.
Теперь я теряюсь и начинаю пробовать глупости, потому что я только начинаю использовать WCF.
Когда я добавляю в конфиг следующий раздел
<security authenticationMode = "UserNameOverTransport"></security>
Я получаю следующую ошибку:
Привязка CustomBinding.http: / / tempuri.org / для контракта AreaWebServiceSoap.AreaWebServices настроена с режимом проверки, для которого требуется транспортный уровень с целостностью и конфиденциальностью. Транспорт не может обеспечить целостность и конфиденциальность.
Извините, но при вводе этого вопроса я сам наткнулся на ответ. Я все еще думаю, что людям это может быть интересно, и все комментарии и мысли приветствуются. Так что я оставлю вопрос здесь, сделаю его сообществом и опубликую ответ сам.





Измените привязку на:
<?xml version = "1.0" encoding = "utf-8" ?>
<customBinding>
<binding name = "AreaWebServiceSoap12" closeTimeout = "00:01:00" openTimeout = "00:10:00"
receiveTimeout = "00:20:00" sendTimeout = "00:05:00">
<textMessageEncoding maxReadPoolSize = "64" maxWritePoolSize = "16"
messageVersion = "Soap12" writeEncoding = "utf-8">
<readerQuotas maxDepth = "32" maxStringContentLength = "8192" maxArrayLength = "16384"
maxBytesPerRead = "4096" maxNameTableCharCount = "16384" />
</textMessageEncoding>
<httpTransport manualAddressing = "false" maxBufferPoolSize = "524288"
maxReceivedMessageSize = "65536" allowCookies = "false" authenticationScheme = "Ntlm"
bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard"
keepAliveEnabled = "true" maxBufferSize = "65536" proxyAuthenticationScheme = "Anonymous"
realm = "" transferMode = "Buffered" unsafeConnectionNtlmAuthentication = "false"
useDefaultWebProxy = "true" />
</binding>
</customBinding>
Итак, установите authenticationScheme = "Ntlm"
А вот как можно подключиться без прокси:
http://blog.bodurov.com/Create-a-WCF-client-for-asmx-web-service-without-using-web-proxy
Спасибо. Хорошее дополнение,