Подключение к веб-сервису asmx через WCF через прокси - PullRequest
4 голосов
/ 14 ноября 2008

Извините, ответ найден при наборе

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

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

Ответы [ 2 ]

4 голосов
/ 14 ноября 2008

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

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

1 голос
/ 23 декабря 2008

А вот как можно подключиться без прокси:

http://blog.bodurov.com/Create-a-WCF-client-for-asmx-web-service-without-using-web-proxy

...