services example entre diferencia cuál crear consumir c# wcf authentication proxy asmx

c# - example - Conectarse a un servicio web de asmx con WCF a través de un proxy



wcf service c# example (2)

Cambiar el enlace a:

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

Así que configure authenticationScheme = "Ntlm"

La respuesta lo siento encontrada al escribir

Estoy intentando conectarme a un servicio web externo que requiere autenticación de nombre de usuario / contraseña a través de un proxy. Estoy usando Visual Studio Express 2008 para generar una referencia de servicio

  • Me he conectado al mismo servicio web usando una referencia web. Solo tuvimos que configurar un tiempo de espera mayor porque lleva mucho tiempo finalizar.
  • Me he conectado a otro servicio web que no requiere autenticación de nombre de usuario / contraseña con una referencia de servicio generada y algunas configuraciones para obtenerlo a través del proxy.

Así que mi pensamiento sería tomar esta referencia, señalar el servicio web correcto y agregar autenticación.

La configuración que estoy usando sin seguridad:

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

He agregado el siguiente código a mi llamada de autenticación:

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(); }

El solo uso de esta configuración genera un error como se esperaba:

La solicitud HTTP no está autorizada con el esquema de autenticación de cliente Anónimo. Se recibe el encabezado de autenticación del servidor, es NTLM.

Ahora me pierdo y empiezo a intentar cosas tontas porque recién estoy empezando a usar WCF.

Cuando agrego la siguiente sección a la configuración

<security authenticationMode="UserNameOverTransport"></security>

Obtuve el siguiente error:

El enlace CustomBinding.http: / / tempuri.org / para el contrato AreaWebServiceSoap.AreaWebServices se configura con un modo de verificación para el que se requiere un nivel de transporte con integridad y confidencialidad. El transporte no puede proporcionar integridad y confidencialidad.

Lo siento, mientras escribía esta pregunta, me encontré con la respuesta yo mismo. Todavía creo que la gente podría estar interesada en esto y todos los comentarios y pensamientos son bienvenidos. Así que dejaré la pregunta aquí y la convertiré en comunidad y publicaré la respuesta yo mismo.