none
Problemas signalR para ver notificaciones cambios bases de datos RRS feed

  • Pregunta

  • Buenas tardes comunidad.

    Quiero actualizar una vista parcial que contiene una lista de contactos por medio de signalr al momento de hacer algún cambio.

    He visto tutoriales y no logro que funciones.

    //Global axas

    SqlDependency.Start(db.Database.Connection.ConnectionString);

    //Este es el HUB

    [HubName("contactHub")]
        public class ContactHub : Hub
        {
            [HubMethodName("contactChange")]
            public static void ContactChange()
            {
                IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ContactHub>();
                context.Clients.All.contactUpdate();
            }
        }

    //Action de la vista parcial ClientesController

    public ActionResult ListContact (long id)
            {
                List<ContactosModel> contact_model = (from b in db.Contactos
                                                     where b.IdClient==id
                                                     select new ContactosModel
                                                     {
                                                         Nombres=b.Nombres,

                                                         Apellidos=b.Apellidos

                                                     }).ToList();
                string sql = @"SELECT [Nombres], [Apellidos] FROM [dbo].[Contactos] WHERE [IdClient] = " + id;
                using (SqlConnection conection = new SqlConnection(db.Database.Connection.ConnectionString))
                {
                    conection.Open();
                    using (SqlCommand command = new SqlCommand(sql, conection))
                    {
                        command.Notification=null;
                        SqlDependency dependency = new SqlDependency(command);
                        dependency.OnChange += new OnChangeEventHandler(Dependency_OnChange);
                    };
                    conection.Close();
                };
                return PartialView("Clientes/_ListContact", contact_model);
            }

    private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                if (e.Type == SqlNotificationType.Change)
                {
                    ContactHub.ContactChange();
                }
            }

    //Javascript en el view principal (cliente), no en el parcial

    $(function () {
                var connection = $.hubConnection();
                var hub = connection.createHubProxy("contactHub");
                hub.on("contactUpdate", function () {
                    $.ajax({
                        url: '@Url.Action("ListContact", "Clientes", new { id = Model.Id })',
                        type: "GET",
                        success: function (data) {
                            $('#contactlist').html(data);
                        },
                    });
                });
                connection.start();
            });

    al momento de cargar el view principal me muestra la información del cliente y sus contactos listados sin ningún problema. pero cuando realizo algún cambio en la base de datos (ya tiene activado el broker) no se actualiza la vista parcial y el SqlDependency no funciona.

    Agradezco de su ayuda. Muchas gracias


    • Editado IFRiD sábado, 9 de mayo de 2020 22:53
    sábado, 9 de mayo de 2020 22:51