none
WebService que devuelva datos del entityFramewor RRS feed

  • Pregunta

  • ¡Hola!

    Llevo todo el fin de semana liado con un WebService que ha de servir datos los cuales los accedo usando EntityFramewor 6.

    El mensaje que recibo cuando desde mi aplicación cliente quiero ejecutar una consulta es:

    Excepción no controlada del tipo 'System.ServiceModel.CommunicationException' en mscorlib.dll

    Información adicional: Error al recibir la respuesta HTTP a http://localhost:8733/Design_Time_Addresses/WcfServiceLibraryInver/Service1/. Puede deberse a que el enlace del extremo de servicio no usa el protocolo HTTP. También puede deberse a que el servidor anula un contexto de solicitud HTTP (posiblemente por el cierre del servicio). Consulte los registros del servidor para obtener más información.

    Pongo el código del webService:

        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            Entidad.UsuarioSet UsuarioLee(int IdUsuario);

    Esta función lee un Usuario, es decir, devuelve un objeto de la clase UsuarioSet

    En la aplicación cliente consumo el servicio así:

     ServiceReferenceInver.Service1Client ws = new ServiceReferenceInver.Service1Client();
                ws.UsuarioLee(3);

    Es al ejecutar ésta instrucción cuando me genera el error que he puesto

    Si creo una función que devuelve tipos normales como string, int  funciona sin problemas..... no entiendo porque falla al usar objetos del modelo generado con EF6

    ¿Pueden darme alguna ayuda al respecto>?

    lunes, 16 de enero de 2017 9:17

Respuestas

Todas las respuestas

  • La única solución es crear dentro de la interfaz del servicio una clase que es la que realmente puedo leer desde aplicación cliente, algo como esto:

           

     [DataContract]
        public class Usuario
        {
            string nombre;
            string clave;
            string email;

            [DataMember]
            public string Nombre
            {
                get
                {
                    return nombre;
                }

                set
                {
                    nombre = value;
                }
            }
            [DataMember]
            public string Clave
            {
                get
                {
                    return clave;
                }

                set
                {
                    clave = value;
                }
            }
            [DataMember]
            public string Email
            {
                get
                {
                    return email;
                }

                set
                {
                    email = value;
                }
            }

    Luego en la implementación de la clase lleno un objerto de esta clase y es lo que devuelvo y puedo leer en la aplicación cliente.  ¿es que no se puede hacer de otro modo?

        }

    lunes, 16 de enero de 2017 9:44
  • hola

    exacto, el servicio en WCF debe devolver DataContract, no puedes/deberias devolver entidades del propio EF

    Utilización de contratos de datos

    la idea es que conviertas de uno a otro (de entidades de EF a entidades de servicio) de ser necesario, puedes ayudarte con automapper

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 16 de enero de 2017 13:03