Подключение к веб-сервису asmx с помощью WCF через прокси

Извините, ответ был найден при наборе текста

Я пытаюсь подключиться к внешнему веб-сервису, который требует аутентификации по имени пользователя и паролю через прокси. Я использую 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 настроена с режимом проверки, для которого требуется транспортный уровень с целостностью и конфиденциальностью. Транспорт не может обеспечить целостность и конфиденциальность.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
15 631
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Измените привязку на:

<?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

Спасибо. Хорошее дополнение,

KeesDijk 01.01.2009 13:55

Другие вопросы по теме