[How To] Consumir un Java Web Service desde VS2010

Introducción

Estoy haciendo un desarrollo que va a hacer uso de servicios web creados en Java. Pese a que el desarrollo lo tengo que realizar en Visual Studio 2005, quería hacer unas pruebas en Visual Studio 2010.

Mi primera sorpresa fue cuando en Visual Studio 2005 los Servicios funcionaban “correctamente” y en Visual Studio 2010 no, para ello vamos a ver un par de cosas en el siguiente apartado.

Soluciones

Hablando del problema por twitter con Alberto Díaz y Lluís Franco, me comentaban que para que el Servicio se referenciara como se hacia en Visual Studio 2005 era necesario seguir los siguientes pasos:

1) Con el botón secundario sobre el proyecto de VS, Agregar Referencia de Servicio.

2) En el cuadro de dialogo seleccionar Avanzadas:

image3) En el siguiente cuadro de dialogo, elegir Agregar Referencia web.

image4) Agregar la referencia de nuestro servicio y pulsar aceptar:

image

Siguiendo estos pasos, dentro de nuestro proyecto se va a crear una carpeta WebReferences donde van a estar las referencias a nuestros servicios agregados de esta manera.

Una vez realizado esto ya podríamos crear instancias y llamar a los métodos del Servicio realizado en Java.  

Yo quería ir un paso mas alla, y intentar conectarme al servicio Java como si estuviera tratando un servicio WCF, es decir, agregando la referencia al servicio en el paso 1 del listado anterior.

Para ello, se plantean varias opciones de servicio, yo voy a tratar un Servicio securizado (HTTPS) y uno normal (HTTP)

Caso HTTP:

Una vez agregada la referencia al servicio, Visual Studio habrá generado un conjunto de clases para tratar con el servicio.

   1: EndpointAddress address = new EndpointAddress(@"MyWebServiceUrl");

   2: BasicHttpBinding binding = new BasicHttpBinding();

   3: MyService.MyServiceEndPointClient cliente = new MyService.MyServiceEndPointClient(binding, address);

   4: try

   5: {

   6:     string cadena=cliente.Method1("TORRECILLA PUERTAS JAVIER");

   7: }

   8: catch (Exception ex)

   9: {

  10:     MessageBox.Show(ex.Message);

  11: }

Lo que estoy haciendo es definir un Binding Basic, cuya seguridad por defecto está desactivada. Y por otro lado estoy definiendo el Endpoint de mi servicio (“es una larga historia que no viene muy al caso”).

Una vez definidos el enlace y la dirección crearemos una instancia del servicio indicándole dichos valores, y ya podríamos invocar a nuestro servicio Java no securizado.

 

Caso HTTPS:

Al igual que en el caso anterior vamos a agregar la referencia al servicio, y a definir un Binding y un  Endpoint. En este caso, dentro del Binding será necesario que definamos la seguridad puesto que el WebService va por HTTPS.

 

   1: try    

   2: {

   3:     EndpointAddress address = new EndpointAddress(@"https://MyServiceURL");

   4:     BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);

   5:     binding.Security.Transport = new HttpTransportSecurity { ClientCredentialType = HttpClientCredentialType.Certificate };

   6:     MyService2.MyService2Client cliente = new MyService2.MyService2Client (binding, address);

   7:     X09Certificate2 certificate = GetMyCertificate();

   8:     cliente.ClientCredentials.ClientCertificate.Certificate = certificate;

   9:     var result= cliente.MyMethod("Javier Torrecilla Puertas");

  10:  

  11: }

  12: catch (Exception ex)

  13: {

  14:     MessageBox.Show(ex.Message);

  15: }

En este caso vamos agregar a la petición un certificado existente en el almacén. (How to Obtener Certificados Digitales), para securizar la llamada y vamos a definir:

– Que la seguridad se de tipo “Transport”

– Y además que sea de tipo Certificado de Cliente.

 

Bueno, espero que este post os sea de utilidad.

Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *