none
Webservice en real me da error pero el localhost no RRS feed

  • Pregunta

  • Buenos días,

    a ver si me podeis echar una mano con esto... he intentado buscar a ver si a alguien le sucedía algo parecido pero no he encontrado nada, así que me he decidido a escribir.

    Por cierto, como no sabía dónde meter esta pregunta la he metido en "Lenguaje C#" pero no se si es el sitio más adecuado...


    Tengo un webservice para gestionar los datos de la aplicación, estos serían por ejemplo dos de los métodos que tengo:

           

            [WebMethod]
            public Boolean Login(String User, String Password)
            {
                try
                {
                    int idlogin = IdInstalador(User, Password);
                    return true;
                }
                catch (Exception e)
                {
                    return false;
                }
            }

            [WebMethod]
            public INSTALADOR ObtenerDatosInstalador(String User, String Password)
            {
                if (Login(User, Password) == false)
                    return null;

                INSTALADOR instalador = new INSTALADOR();
                using (IngeRASDataContext ctx = IngeRASDataContext.ReadOnlyDC())
                {
                    var query = from i in ctx.INSTALADOR
                                where i.AspUserName == User
                                && i.Pssw.Trim().ToUpper() == Password.Trim().ToUpper()
                                select i;
                    foreach (var instal in query)
                    {
                        instalador = instal;
                    }
                }
                return instalador;
            }  


    Si yo ejecuto el webservice desde local no hay ningun problema, tanto para el login que devuelve un true, como para el método de obtener datos instalador, que me devuelve un xml

    respuesta de login:

    <boolean>true</boolean>


    respuesta de ObtenerDatosInstalador

    <INSTALADOR>
        <IdInstalador>71</IdInstalador>
        <Nombre>Bea</Nombre>
        <Direccion>Av de la Ciudad de la Innovación, 13 </Direccion>
        <Telefono1/>
        <Telefono2/>
        <Fax/>
        <webpage/>
        <Email>beaa@prueba.com</Email>
        <CodPostal>31621</CodPostal>
        <Ciudad>Ansoain</Ciudad>
        <Provincia></Provincia>
        <Pais></Pais>
        <Implementado>true</Implementado>
        <AspUserName>bea</AspUserName>
        <Pssw>17141</Pssw>
        <AvisosComerciales>false</AvisosComerciales>
        <HUERTASOLAR/>
        <Rel_InstClte/>
        <Licenciamiento/>
    </INSTALADOR>

    pero, si yo ejecuto este servicio en real, la respuesta del login sigue siendo true, pero la respuesta del otro método da el siguiente error

    System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
       en AAX1026.IngeRASDataContext.DC()
       en AAX1026.IngeRASDataContext.ReadOnlyDC()
       en AAX1026.AAX1026IJD01_installer.ObtenerDatosInstalador(String User, String Password)

    la clase INSTALADOR la ha creado directamente Linq

    ¿Sabeis a qué se puede deber este error?

    Muchas gracias y un saludo.




    • Editado bea.a lunes, 4 de junio de 2012 12:37
    lunes, 4 de junio de 2012 12:36

Respuestas

Todas las respuestas

  • hola

    veo que haces esto

    if (Login(User, Password) == false)
        return null;

    la pregunta seria cuando consumes el servcio tienes en cuenta que puede recibir un null, no ? digo porque si continuas tendras ese problema que estas teniendo

    o sea como usas lo que recibes del servicio

    ---

    ademas el webmethod Login() esta mal implementado

    se supone que devuelve IdInstalador() debes evaluarlo para ver si es true o false y no trabajar con el error

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 4 de junio de 2012 12:47
  • Yo te sugeriría escribir en un fichero de log o en Event log justo después de:

    using (IngeRASDataContext ctx = IngeRASDataContext.ReadOnlyDC())


    Y también después de

    var query = from i in ctx.INSTALADORwhere i.AspUserName == User
    i.Pssw.Trim().ToUpper() == Password.Trim().ToUpper()
    select i;

    De esa forma puedes saber qué instrucción te está devolviendo  Null y ver el motivo. A mi me parece que el problema puede estar en la conexión a la base de datos que usas para tu contexto de transacciones "ctx" y que el primer using está devolviendo null.


    logo osoft
    Si he contestado tu pregunta, por favor marca mi post como respuesta.
    ...Y si mi post te ha servido, márcalo como útil smile


    • Editado Yván Ecarri lunes, 4 de junio de 2012 12:54
    • Propuesto como respuesta Yván Ecarri martes, 5 de junio de 2012 9:02
    lunes, 4 de junio de 2012 12:52
  • Hola Leandro,

    cuando llamo al servicio desde la aplicación sí tengo controlado si me devuelve null, pero para probar el método lo estaba haciendo desde el mismo navegador, y lo que comentaba, desde el localhost me devuelve el objeto bien pero desde real me devuelve el System.NullReferenceException...

    lunes, 4 de junio de 2012 15:08
  • Hola Yvan,

    voy a probar con el log, a ver si consigo configurarlo y te digo a ver si veo algo...

    gracias :)

    lunes, 4 de junio de 2012 15:11
  • el objeto bien pero desde real me devuelve el System.NullReferenceException...

    pero porque no te creas una aplciacion winforms que invoque al servicio y veas si es un error del servicio o es un error que se genera despues de invocarlo, por controlar de forma incorrecta lo que haces con lo que este devuelve

                INSTALADOR instalador = null;
                using (IngeRASDataContext ctx = IngeRASDataContext.ReadOnlyDC())
                {
                    INSTALADOR instalador = (from i in ctx.INSTALADOR
                                             where i.AspUserName == User
                                             && i.Pssw.Trim().ToUpper() == Password.Trim().ToUpper()
                                             select i).FirstOrDefault();
                }
                return instalador;

    recuerda que puede devolver null como respuesta, debs validarlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 4 de junio de 2012 15:32
  • Al final el problema era la conexión a la base de datos, no la estaba haciendo bien.

    Muchas gracias por vuestra ayuda :)

    martes, 5 de junio de 2012 9:00