none
SqlDependency Deja de funcionar RRS feed

  • Pregunta

  • Hola espero esten bien, tengo una duda, tengo una aplicacion la cual utiliza SignalR y SqlDependency, pero este dejo de funcionar o bien funciona de una manera rara. El codigo que utilizo es el siguiente:

    readonly string _connString = ConfigurationManager.ConnectionStrings["Cnx"].ConnectionString;
            public int GetNotificationPermission(string IDSolic, string CCPID)
            {
                //TP.- True: Secciones, False: Compañia           
                int TotalNot = 0;
    
                using (var con = new SqlConnection(_connString))
                {                
                    con.Open();
                    using (var cmd = new SqlCommand(@"SELECT [State] FROM [dbo].[Permissions] WHERE [State]=@S1 OR [State]=@S2 AND [Notification]=1 AND [CCPId]=@CCPID AND [MapsSectionsId]=@MSID", con))
                    {
                        cmd.Parameters.AddWithValue("@S1", 10);
                        cmd.Parameters.AddWithValue("@S2", 11);
                        cmd.Parameters.AddWithValue("@CCPID", CCPID);
                        cmd.Parameters.AddWithValue("@MSID", IDSolic);
                        cmd.Notification = null;
                        var dependency = new SqlDependency(cmd);
    
                        dependency.OnChange += new OnChangeEventHandler(Dependency_OnChange);
                        
                        if (con.State == ConnectionState.Closed)
                            con.Open();
    
                        var reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            TotalNot++;
                        }
                    }
                }
                return TotalNot;
            }        
    
            private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {            
                if (e.Type == SqlNotificationType.Change)
                {
                    NotificationHub.SendMessages();
                    
                }
            }       

    antes cuando cambiaba el valor [State] directo de la base de datos u otra aplicación que se conectaba a la Base, se ejecutaba "Dependency_OnChange" pero ahora pero ahora solo se ejecuta cuando cambio el valor a "10" y en ocaciones a "11", pero si pongo "12", "8", "7" o n, este ya no ejecuta.

    tengo algun error en la consulta?, espero puedan ayudarme. agradezco de antemano su apoyo.

    Saludos.

    martes, 23 de abril de 2019 6:06

Respuestas

  • Ya pude solucionarlo, quiza no de la forma mas ética, bueno hice trampa modifique la cadena de busqueda asi:

    "SELECT [State] FROM [dbo].[Permissions]", con esta simple busqueda me detecta cualquier cambio en State o cuando se agregan nuevos items.

    y al final hice un Linq para realizar la busqueda que requiero

    if (reader.Read())
                        {
                            using (Models.DataContextLocal db = new Models.DataContextLocal())
                            {
                                int[] Val = { 10, 11 };
                                TotalNot = db.Permissions.Where(w => Val.Contains(w.State) && w.Notification == true && w.CCPId == CCPID && w.MapsSectionsId == IDSolic).Count();
                            }
                            //TotalNot =
                        }

    Quizá no sea lo optimo pero me funciona.

    Gracias a todos! Saludos.

    • Marcado como respuesta Folanc miércoles, 24 de abril de 2019 17:06
    miércoles, 24 de abril de 2019 17:06