Me han proporcionado un servicio web escrito en Java que no puedo hacer ningún cambio. Requiere que el usuario se autentique con autenticación básica para acceder a cualquiera de los métodos. La forma sugerida de interactuar con este servicio en .NET es mediante el uso de Visual Studio 2005 con WSE 3.0 instalado.No se puede llamar al servicio web con autenticación básica usando WCF
Esto es un problema, ya que el proyecto ya está utilizando Visual Studio 2008 (orientación .NET 2.0). Podría hacerlo en VS2005, sin embargo, no quiero vincular el proyecto a VS2005 o hacerlo creando un ensamblaje en VS2005 e incluyendo eso en la solución VS2008 (que básicamente relaciona el proyecto con 2005 de todos modos para cualquier cambio futuro en el ensamblaje)) Creo que cualquiera de estas opciones complicaría las cosas para los nuevos desarrolladores al obligarlos a instalar WSE 3.0 y evitar que el proyecto pueda usar 2008 y las características en .NET 3.5 en el futuro ... es decir, realmente creo que usar WCF es el camino a seguir.
He estado buscando el uso de WCF para esto, sin embargo no estoy seguro de cómo lograr que el servicio WCF entienda que necesita enviar los encabezados de autenticación junto con cada solicitud. Recibo 401 errores cuando intento hacer algo con el servicio web.
Esto es lo que se ve mi código como:
WebHttpBinding webBinding = new WebHttpBinding();
ChannelFactory<MyService> factory =
new ChannelFactory<MyService>(webBinding, new EndpointAddress("http://127.0.0.1:80/Service/Service/"));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
factory.Credentials.UserName.UserName = "username";
factory.Credentials.UserName.Password = "password";
MyService proxy = factory.CreateChannel();
proxy.postSubmission(_postSubmission);
Esto ejecutará y lanzar la siguiente excepción:
The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm=realm'.
Y esto tiene una excepción interna de:
The remote server returned an error: (401) Unauthorized.
Cualquier idea sobre lo que podría estar causando este problema sería muy apreciada.
Marc, ¿Me puede mostrar cómo codificar y config si es RESTO basado en el servicio de Java? – rajibdotnet
La propiedad ClientCredentials no aparece en absoluto después de que escribí el proxy. – rajibdotnet
@rajibdotnet: bueno, el código en la pregunta es básicamente lo que necesita para llamar a un servicio REST .... si eso no ayuda: por favor ** haga su propia pregunta ** para que la gente pueda responder ... –