none
LLamada a webService SOAP con HEADER RRS feed

  • Pregunta

  • Buenos días,

    He de llamar a un servicio web SOAP en el que debo pasar en la cabecera (HEADER) un usuario/contraseña.

    Un extracto de la petición sería la imagen que adjunto al pie del mensaje.

    ¿Algún ejemplo (vb/c#) de como realizar la llamada?

    He visto algunos foros y hablan de referenciar el wse 3.0, otros con ws.credentialclient.username.name=loquesea y ws.credentialclient.username.pass=loquesea.

    Todas las pruebas que he realizado hasta el momento sin exito.

    Saludos, Jesús

    lunes, 21 de enero de 2019 20:10

Respuestas

  • hola

    Si tienes un mensaje SOAP, entonces puede tener el WSDL del servicio y crear una Web Reference

    Authentication for Web Services (using SOAP headers)

    analiza el articulo como invoca la web reference

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de enero de 2019 20:29
  • Recuerda que una vez generado el cliente en vía Web Reference. Situate en la clase Reference.cs y cambia la definición de tu servicio para que herede de Microsoft.Web.Services3.WebServicesClientProtocol

    NOTA: Cada vez que actualices el cliente este cambio deberás realizar el cambio, a menos que Reference.cs la muevas a otro sitio en tu proyecto

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.6.81.0")]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Web.Services.WebServiceBindingAttribute(Name="PortalServicesServicePortBinding", Namespace="http://portalServices.services.efact.realtech.es/")]
        public partial class MyService
            : Microsoft.Web.Services3.WebServicesClientProtocol


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 22 de enero de 2019 14:20
    Moderador
  • Buenos días,

    He de llamar a un servicio web SOAP en el que debo pasar en la cabecera (HEADER) un usuario/contraseña.

    Un extracto de la petición sería la imagen que adjunto al pie del mensaje.

    ¿Algún ejemplo (vb/c#) de como realizar la llamada?

    He visto algunos foros y hablan de referenciar el wse 3.0, otros con ws.credentialclient.username.name=loquesea y ws.credentialclient.username.pass=loquesea.

    Todas las pruebas que he realizado hasta el momento sin exito.

    Saludos, Jesús

    efectivamente, debes referenciar WS3.0. Y luego generar un UserNameToken y establecerlo en el cliente 

    using Microsoft.Web.Services3;
    using Microsoft.Web.Services3.Security.Tokens;
    using Microsoft.Web.Services3.Security;
    .
    .
    .
    MyServiceClientProxy ws = new MyServiceClientProxy ();
    ws.RequestSoapContext.Security.Tokens.Add(new UsernameToken("blah", "blah", PasswordOption.SendPlainText));


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 22 de enero de 2019 14:14
    Moderador

Todas las respuestas

  • hola

    Si tienes un mensaje SOAP, entonces puede tener el WSDL del servicio y crear una Web Reference

    Authentication for Web Services (using SOAP headers)

    analiza el articulo como invoca la web reference

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de enero de 2019 20:29
  • Gracias Leandro, cierto tengo el WSDL y puedo agregar la referencia web, la cuestión es luego, desde código paso en el HEADER el usuario/pass.

    Habia visto este ejemplo, si no me equivoco es un ejmplo de como construir el servicio, no el cliente.

    El servicio no es mio, es de terceros.

    Saludos,

    Jesús

    martes, 22 de enero de 2019 5:48
  • Buenos días,

    He de llamar a un servicio web SOAP en el que debo pasar en la cabecera (HEADER) un usuario/contraseña.

    Un extracto de la petición sería la imagen que adjunto al pie del mensaje.

    ¿Algún ejemplo (vb/c#) de como realizar la llamada?

    He visto algunos foros y hablan de referenciar el wse 3.0, otros con ws.credentialclient.username.name=loquesea y ws.credentialclient.username.pass=loquesea.

    Todas las pruebas que he realizado hasta el momento sin exito.

    Saludos, Jesús

    efectivamente, debes referenciar WS3.0. Y luego generar un UserNameToken y establecerlo en el cliente 

    using Microsoft.Web.Services3;
    using Microsoft.Web.Services3.Security.Tokens;
    using Microsoft.Web.Services3.Security;
    .
    .
    .
    MyServiceClientProxy ws = new MyServiceClientProxy ();
    ws.RequestSoapContext.Security.Tokens.Add(new UsernameToken("blah", "blah", PasswordOption.SendPlainText));


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 22 de enero de 2019 14:14
    Moderador
  • Recuerda que una vez generado el cliente en vía Web Reference. Situate en la clase Reference.cs y cambia la definición de tu servicio para que herede de Microsoft.Web.Services3.WebServicesClientProtocol

    NOTA: Cada vez que actualices el cliente este cambio deberás realizar el cambio, a menos que Reference.cs la muevas a otro sitio en tu proyecto

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.6.81.0")]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Web.Services.WebServiceBindingAttribute(Name="PortalServicesServicePortBinding", Namespace="http://portalServices.services.efact.realtech.es/")]
        public partial class MyService
            : Microsoft.Web.Services3.WebServicesClientProtocol


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 22 de enero de 2019 14:20
    Moderador
  • hola

    >>la cuestión es luego, desde código paso en el HEADER el usuario/pass.

    no lo del usuario/pass es el ejemplo de ese articulo, en tu caso si se expone en el header otra cosa al crear la web reference definira codigo para que puedas asignarlo de la misma tecnica

    si el wsdl del servicio define el header porque el servicio lo expone el proxy creara el codigo para que lo asignes

    Si puedes ver el wsdl busca entre los tags el <soap:Header> para ver que nombre usa y despues buscarlo en el codigo del proxy que genera la web reference

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 22 de enero de 2019 19:29
  • Gracias Sergio, sigo sin verlo. Voy a hacer unas pruebas.

    Saludos,

    martes, 22 de enero de 2019 20:04
  • Gracias Leandro, en el WSDL no veo entradas con <soap:Header>, y gracias por tu respuesta

    saludos,

    Jesús

    martes, 22 de enero de 2019 20:07
  • >>en el WSDL no veo entradas con <soap:Header>

    pero estoy viendo en la imagen que ponesen la pregunta y alli veo el Header solo que el namespace es soapenv:Header

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 22 de enero de 2019 20:48
  • Hola, te recomiendo descargues SoapUI e importes ese Wsdl. Una vez importado puedes hacer peticiones y verás como se generan los "sobres" Soap.

    De todas formas intenta aplicar lo explicado en mi respuesta. Importa Wse3. 0, cambia en la definición de tu cliente a WebServicesClientProtocol y establece un UserNameToken. Según la imagen de tu pregunta es lo que hay que generar para crear la cabecera correcta. 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 22 de enero de 2019 20:58
    Moderador