2008-11-14 4 views
4

Извините ответ найден при вводеПодключение к ASMX WebService с WCF через прокси-сервер

Я пытаюсь подключиться к внешнему веб-сервиса, который требует проверки подлинности имя пользователя/пароль через прокси-сервер. Я использую Visual Studio Express 2008 для создания ссылки на службу

  • Я подключен к тому же WebService с помощью веб-reference.We только пришлось установить большее время ожидания потому что это занимает много времени, чтобы закончить ,
  • я подключен к другому WebService, который не требует аутентификации имени пользователя/пароль сгенерированной ссылкой службы и некоторых настройками, чтобы получить его через прокси.

Так что моя мысль будет принять эту ссылку, направьте его на правильной WebService и добавьте аутентификацию.

Конфигурационного Я использую без безопасности:

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

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

ответ

4

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

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