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.
Y aquí es cómo puedes conectarte sin proxy:
http://blog.bodurov.com/Create-a-WCF-client-for-asmx-web-service-without-using-web-proxy