Consumir Web Service Java por https desde .Net

Publicado en 'Programación' por eduar2083, 26 Jun 2014.





  1. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46




    Buenas tardes estimados.

    Esperando pues me puedan orientar con un tema con el que llevo atascado ya buen rato.
    Unos colegas me han enviado una url de un web service como la siguiente:
    https://servidor:8904/Serivicio?WSDL

    Como pueden apreciar, el canal de transporte es https, es decir, con seguridad. Para esto me han hecho llegar un archivo con extensión .cer (el certificado digital) que me servirá para autenticar mi petición al servicio y poder consumirlo, pero estoy teniendo problemas ya que es la primera vez que trabajo con este protocolo.

    El web service está implementado en Java corriendo sobre un servidor weblogic y ya está siendo consumido por un cliente java, sin embargo no he logrado consumirlo desde una aplicación .Net
    He investigado demasiado en la red pero aún no logro mi propósito y me está tirando una WebException cuando invoco al método del Web service:

    Código:
    WebException: Soap Header was not understood
    Muchas gracias desde ya.

    Saludos cordiales.
     


  2. michael_douglas

    michael_douglas Suspendido

    Registro:
    26 Dic 2013
    Mensajes:
    735
    Likes:
    305
    Mis respetos para quien responda esta pregunta.

    DEBE COSTAR SABERLO claro esta
     
  3. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    792
    Likes:
    252
    Configurastes el servicio como un endpoint?, normalmente para https solo es :

    - el cer se puede usar como no,
    - Si hay cer , lo agregas al request header de la peticion soap.
    - Si no hay cer, se hace un override del trustcertificate method en la peticion. (para simular la aceptacion de certificado invalido)

    y otra puedes usar el soapui que recuerde te genera el codigo necesario en .net paa consumir el webservice.
     
  4. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Gracias gnox por tu respuesta.
    - Si el servicio está protegido por un certificado y este contiene el algoritmo de encriptación pues creo que es necesario el certificado. Ya había probado con un delegado devolviendo true.
    - Yo estaba agregando el certificado al proxy de la siguiente manera:
    Código:
    try
    {
    
       X509Certificate2 certificado = GetCertificado(); // Obtengo el certificado desde el almacén de    certificados de confianza (Root Trusted Certificates)
    
       MyService proxy = new MyService();
       proxy.ClientCertificates.Certificate = certificado;
    
       var resultado = proxy.MetodoLlamado(param1, param2, param3, ...);
    
       return resultado;
    }
    catch (Exception ex)
    {
       throw ex;
    }
    
    Pero me tiraba siempre la Excepción.
    - Respecto al SOAP UI me daba envidia de porqué usando esa herramienta el Web Service se invocaba sin problemas y estuve investigando también respecto a generar el código con .Net Artifacts pero no lo conseguí. Afortunadamente he logrado dar con la solución. El problema radicaba en que VS2008 y VS2010 no soportan WSE (Web Services Enhancements) y al parecer al invocar por https se utiliza esta tecnología. La falta de soporte es debido a que está siendo reemplazada por servicios WCF. En fin, finalmente tuve que instalar un componente WSE 3.0 en el servidor donde está el IIS, dicha instalación trae consigo una dll (Microsoft.Net.Services3.dll) que se debe agregar al proyecto y reemplazar dentro del archivo autogenerado Reference.cs una clase.

    De esta manera he logrado acceder al Web Service sin problemas, había posteado mi problema en varios foros extranjeros pero lamentablemente nadie me daba solución nisiquiera me respondían así que de tanto buscar encontré un artículo (en inglés) que me ayudó muchísmo.

    Probaré a ver sin instalar el certificado y redefinir la política de pasarlo por alto, ya estaré posteando qué tal me va.

    Muchas gracias.

    Saludos cordiales.
     
  5. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    792
    Likes:
    252
    raro que tengas que instalar algo del lado del servidor (asumo IIS->WebLogic) para que te funcione el request del cliente, ya que el cliente de java que mencionas hace lo mismo (y no sabe ni le interesa que componentes hay en el servidor solo que le responda via http el webservice).

    En vez de usar toda esa "funcionalidad" que te da el .net, quizas un simple HttpWebRequest del soap envelope con el certificado x509 hubiera sido mas facil al final solo es enviar xml y recibir xml.
     
    Última edición: 27 Jun 2014
  6. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Efectivamente, se trata sólo de enviar y recibir XML pero sucede que para hacerlo por el canal https se utiliza tecnología WSE la cual ya ha sido descartada desde VS2008 en adelante (yo utilizo VS2010), esto porque Microsoft pretende migrar todo lo referente a servicios hacia WCF, por tal motivo es que si se desea utilizar dicha tecnología debo hacer uso de la dll que menciono (Microsoft.Web.Services3.dll) que viene con dicho paquete de instalación. Claro que de momento es la única solución que he encontrado, seguramente debe haber otra pero por cuestión de tiempo no puedo investigar más allá (en su momento lo haré). Ojo que esto sólo me está ocurriendo para consumir el web service a través del canal seguro ya que he consumido muchísimos web services por http sin ningún inconveniente y sin necesidad de utilizar una dll extra, el problema se me presenta sólo con https. Yo pienso que el cliente Java que lograron implementar tiene su propia tecnología y seguramente que el consumo por ambos canales debe ser más transparente comparado con tecnología .Net.
    Lo de SOAP UI no lo he implementado para que me genere código para consumir el WS, también en su momento me pondré a investigar al respecto.

    Saludos.
     
  7. TanSoloJP

    TanSoloJP Miembro maestro

    Registro:
    3 Ago 2011
    Mensajes:
    984
    Likes:
    120
    Chochera sólo por las dudas, ya instalaste ese certificado (.cer) en tu servidor IIS? asumo que no te lo han enviado por gusto...

    Saludos,
    JP:hi:
     
  8. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Nunca lo instalé por IIS, lo instalé en el almacén de Certificados de Confianza utilizando la herramienta mmc.exe que vendría a hacer lo mismo que hacerlo por IIS asumo. Dado que ahí encontré un certificado que se encuentra instalado en IIS.

    Saludos.