none
No logro acceder al DomainService RRS feed

  • Pregunta

  • Buenos días,

    Estoy teniendo problemas al intentar acceder a mi DomainService creado, estos son los pasos que realizo:

    Primero creo el modelo llamado CashFlowModel.edmx

    Luego creo el DomainService llamado CashFlowDomainService

    Compilo el proyecto

     

    Luego quiero acceder a CashFlowDomainService y no me reconoce la instrucción:

    CashFlowDomainService theDomainService= new WebContext.Current.CashFlowDomainService;

     

    que está mal ?

     

    gracias por su ayuda!!

     

     


    JorDiz
    jueves, 14 de julio de 2011 15:17

Respuestas

  • Hola JorDiz.

    ¿Estamos hablando de Silverlight sobre una aplicacion web?.

    Si es asi, el proyecto web se debe compilar despues de haber asociado el archivo .edmx con los modelos para que luego al crear el DomainService, reconozca los modelos y se puedan checkear para generar la clase.

    Supongo que esto ya lo tienes echo, ademas en el proyecto Siilverlight tienes que activar que usaras servicios RIA en las propiedades.

    Luego tienes que saber que tu no puedes acceder al servicio de dominio directamente desde la aplicacion silverlight, si no que accedes mediante el contexto de dominio que es una clase que se habra creado si tienes activados los servicios RIA en las propiedades del proyecto silverlight al compilarlo (esta clase esta oculta y la podras ver en la carpeta 'Generated_Code' al compilar el proyecto y de paso puedes ver el nombre de espacios para usarlo).

    Bien esta clase se te habra creado bajo el nombre de espacios del servicio de dominio, que lo podras ver en la clase del servicio de dominio o en el archivo creado por Silverlight mencionado anteriormente, de modo que para crear y usar el contexto de dominio desde silverlight tienes que escribir algo asi:

    SilverlightApplication1.Web.CashFlowDomainContext context = new Web.CashFlowDomainContext();
    

    Donde el nombre de espacios sera el que tu tengas.

    En ese namespace tendras ademas las entidades de EntityFramework.

     

     

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta JorDiz jueves, 14 de julio de 2011 20:48
    jueves, 14 de julio de 2011 18:09
  • Hola JorDiz.

    Si, parecia facil pero hay que tener algunas cosas en cuenta, las llamadas siempre son asincronas, de modo que se llama y cuando responda se invocara al evento correspondiente.

    En este otro post que he encontrado escribi como hacerlo:

    http://social.msdn.microsoft.com/Forums/es/wpfes/thread/ae27be34-d64f-401f-84c9-3b950e13ba65

    Si tienes problemas comentalo.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta JorDiz jueves, 14 de julio de 2011 20:49
    jueves, 14 de julio de 2011 19:22
  • Hola JorDiz.

    No, el proyecto da igual. Las diferencias entre los diferentes proyectos solo residen en las plantillas y ensamblados creados por defecto inicialmente, puedes usar cualquier aplicacion silverlight con cualquier tipo de proyecto que sea de silverlight siempre que añadas los ensamblados necesarios. De modo que si no te da error al compilar, es todo correcto (bueno todo esta bien referenciado, no tiene por que estar bien programado).

    El problema del servicio es independiente, en un principio los valores que te interesan estan en la propiedad Value, el UserState no se para que lo usas, mira si tiene valores el io.Value y asocialo al ItemSource, esto deberia bastar para lo que quieres.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta JorDiz martes, 19 de julio de 2011 17:09
    martes, 19 de julio de 2011 16:57

Todas las respuestas

  • Hola JorDiz.

    ¿Estamos hablando de Silverlight sobre una aplicacion web?.

    Si es asi, el proyecto web se debe compilar despues de haber asociado el archivo .edmx con los modelos para que luego al crear el DomainService, reconozca los modelos y se puedan checkear para generar la clase.

    Supongo que esto ya lo tienes echo, ademas en el proyecto Siilverlight tienes que activar que usaras servicios RIA en las propiedades.

    Luego tienes que saber que tu no puedes acceder al servicio de dominio directamente desde la aplicacion silverlight, si no que accedes mediante el contexto de dominio que es una clase que se habra creado si tienes activados los servicios RIA en las propiedades del proyecto silverlight al compilarlo (esta clase esta oculta y la podras ver en la carpeta 'Generated_Code' al compilar el proyecto y de paso puedes ver el nombre de espacios para usarlo).

    Bien esta clase se te habra creado bajo el nombre de espacios del servicio de dominio, que lo podras ver en la clase del servicio de dominio o en el archivo creado por Silverlight mencionado anteriormente, de modo que para crear y usar el contexto de dominio desde silverlight tienes que escribir algo asi:

    SilverlightApplication1.Web.CashFlowDomainContext context = new Web.CashFlowDomainContext();
    

    Donde el nombre de espacios sera el que tu tengas.

    En ese namespace tendras ademas las entidades de EntityFramework.

     

     

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta JorDiz jueves, 14 de julio de 2011 20:48
    jueves, 14 de julio de 2011 18:09
  • Gracias David por tu ayuda, perdón por las preguntas pueden sonar básicas pero recién comienzo con Silverlight ;),

     

    Efectivamente ya tengo acceso al Contexto luego de la explicación que me distes, ahora una última pregunta, en mi DomainService tengo esto:

            public IEnumerable<CashFlowComplexType> GetCashFlowComplexType(int iMes)
            {
                return this.ObjectContext.fiCashFlow(iMes);
            }

     

    es un ComplexType que he creado a partir de un SP que se le envía un parámetro(el mes a procesar), ahora quiero mostrarlo en un datagrid pero sinceramente no encuentro como?, he visto varios ejemplos pero no encuentro algo respecto a los ComplexType, podrías ayudarme ?


    JorDiz
    jueves, 14 de julio de 2011 19:04
  • Hola JorDiz.

    Si, parecia facil pero hay que tener algunas cosas en cuenta, las llamadas siempre son asincronas, de modo que se llama y cuando responda se invocara al evento correspondiente.

    En este otro post que he encontrado escribi como hacerlo:

    http://social.msdn.microsoft.com/Forums/es/wpfes/thread/ae27be34-d64f-401f-84c9-3b950e13ba65

    Si tienes problemas comentalo.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta JorDiz jueves, 14 de julio de 2011 20:49
    jueves, 14 de julio de 2011 19:22
  • Hola David, ya casi logro terminar lo del ComplexType y Silverlight, pero sigo con el inconveniente de no poder mostrar los datos en el datagrid, sé que el método se está ejecutando porque al ir a revisar al Servidor de datos SQL el procedimiento se ha ejecutado, alguna idea de qué más tengo que realizar ?

    Voy a explicar más o menos como lo tengo talvez puedas ayudarme:

    En mi form tengo un botón que ejecuta el código siguiente:

            private void btnShowCashFlow_Click(object sender, System.Windows.RoutedEventArgs e)
            {
                int iMes = 1 + int.Parse(comboBox1.SelectedIndex.ToString());
                this.theDomainContext.GetCashFlowComplexType(iMes, this.OnCashFlowLoaded,null );
               
            }

    Este es el método OnCashFlowLoaded

            private void OnCashFlowLoaded(InvokeOperation<IEnumerable<CashFlowComplexType>> io)
            {
                if (io.HasError)
                {
                    MessageBox.Show(io.Error.ToString());
                }
                else
                {
                    CashFlowComplexType qrCashFlow = (CashFlowComplexType)io.UserState;      ************************
                    qrCashFlow.ACashFlow = io.Value;
                    DGCashFlow.ItemsSource = qrCashFlow.ACashFlow;

                }
            }

     

    Donde he colocado los asteriscos si está bien.... en base a un ejemplo que he bajado de internet he creado el código siguiente:

     

    CashFlowComplexType es una clase partial que contiene:

     

        public partial class CashFlowComplexType
        {

            private IEnumerable<CashFlowComplexType> aCashFlow;
            public IEnumerable<CashFlowComplexType> ACashFlow
            {
                get
                {
                    return this.aCashFlow;
                }
                set
                {
                    this.aCashFlow = value;
                }
            }
        }

     

    Pero no me muestra nada en el DataGrid!!, no da error ni nada, y como te repito el SP se ejecuta en SQL Server porque los datos han cambiado

    Perdón por lo extenso del mensaje pero era para darme a explicar un poco mas ;)

     

    gracias nuevamente por tu ayuda!


    JorDiz
    viernes, 15 de julio de 2011 5:28
  • Hola JorDiz.

    Bueno, aqui lo primero es ver donde esta el problema real.

    Lo primero, pon un breakpoint en esta linea:

    DGCashFlow.ItemsSource = qrCashFlow.ACashFlow;
    

    y mira si el objetoACashFlow contiene elementos.

    Ademas, asegurate de que el datagrid tiene puesta la propiedad AutoColumns a true. Realmente con que establezcas el io.Value al ItemsSource del grid, ya deberian mostrarse los datos, siempre y cuando existan datos en esa coleccion (por eso, lo primero es ver si la coleccion io.Value contiene datos).

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    viernes, 15 de julio de 2011 6:52
  • Hola David gracias por tu tiempo, perdón que no había respondido pero me cambiaron el "cassette" en la empresa un momento.

     

    Hice lo del Debug y al principio no me funcionaba pero parece que esto aplica solo para IE el debug no funciona en Firefox, parece lógico por ser tecnologías Microsoft las que estoy depurando, lo importante es que en IE me da el siguiente error:

    [Arg_NullReferenceException]
    Arguments:
    Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem.

     

    y no logro dar con él, fui a buscar a un dirección que da la excepción pero me manda a instalar Silverlight Developer versión 3 y en mi caso ya tengo instalada la 4 con Tools y la beta de la 5 con tools, alguna idea respecto a este error ?

     

    Nuevamente agradecido por tu ayuda,!

     


    JorDiz
    lunes, 18 de julio de 2011 17:36
  • Hola JorDiz.

    Si, para depurar se requieren 2 cosas:

    1.- trabajar con IExplorer

    2.- habilitar la depuracion Silverlight en las propiedades del proyecto.

    En cuanto al error, tiene pinta de acceder a una referencia nula, para en el punto de interrupcion que te he comentado y verifica en una ventana de inspeccion de propiedades la variable 'io'.

    Lo de la direccion que te manda a instalar Silverlight 3 es raro, asegurate que el proyecto silverlight use la version 4 en las propiedades del proyecto, no uses la 5 ni la 3 en caso de tenerla instalada.

    Comprueba si este problema te lo da siempre o solo con el proyecto (crea uno nuevo silverligth y depura para ver si te deja)

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 19 de julio de 2011 6:19
  • Gracias David, efectivamente estaba usando la versión 5 en el proyecto, ya lo cambié a la 4 pero el error persite, como tú dices el error se refiere a una referencia nula en la propiedad 'io', ahora una consulta, como he explicado recién estoy comenzando con las aplicaciones en silverlight y la aplicación que estoy diseñando es el conjunto de varios ejemplos que he bajado en internet (una ensalada tecnológica, ejjeje), io.UserState me está devolviendo null, en cuanto a la aplicación no la he creado tipo "Silverligth Bussiness Application", sino solamente "Silverlight Aplication", se deberá a esto el error de io.UserState? ya que no le he configurado ventana de login a la aplicacion...

     

    gracias nuevamente


    JorDiz
    martes, 19 de julio de 2011 12:49
  • Hola JorDiz.

    No, el proyecto da igual. Las diferencias entre los diferentes proyectos solo residen en las plantillas y ensamblados creados por defecto inicialmente, puedes usar cualquier aplicacion silverlight con cualquier tipo de proyecto que sea de silverlight siempre que añadas los ensamblados necesarios. De modo que si no te da error al compilar, es todo correcto (bueno todo esta bien referenciado, no tiene por que estar bien programado).

    El problema del servicio es independiente, en un principio los valores que te interesan estan en la propiedad Value, el UserState no se para que lo usas, mira si tiene valores el io.Value y asocialo al ItemSource, esto deberia bastar para lo que quieres.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta JorDiz martes, 19 de julio de 2011 17:09
    martes, 19 de julio de 2011 16:57
  • Gracias!!!!!!!!!!!!!! ufff luego de varios días de batalla!!! eso era David con sólo asignar al itemsource el valor de io.value .........

     

    Infinitamente gracias!!!


    JorDiz
    martes, 19 de julio de 2011 17:09