none
Notificacion de actualizaciones SQL por Sockets RRS feed

  • Pregunta

  • Se puede realizar la notificación de servidor a cliente por medio de sockets cuando existe un cambio en base de datos? He estado investigando con SignalR he visto que necesita un front con javascript. Pero solo me interesa el Back ,esto para el cliente solo escuche los cambios sin la dependencia de js.

    el codigo con comentarios es precisamente del proyecto #SignalRDbUpdates en Git.

     public class SocketsController : ApiController
        {
            readonly string _connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            [Route("api/Sockets/Modifica")]
            [HttpGet, ActionName("Modifica")]
            [ResponseType(typeof(List<Messages>))]
            public HttpResponseMessage Modifica()
            {
                MessagesRepository repositorio = new Models.MessagesRepository();
                return this.Request.CreateResponse(HttpStatusCode.OK, repositorio.GetAllMessages()); ;
                //var messages = new List<Messages>();
                //using (var connection = new SqlConnection(_connString))
                //{
                //    connection.Open();
                //    using (var command = new SqlCommand(@"SELECT [MessageID], [Message], [EmptyMessage], [Date] FROM [dbo].[Messages]", connection))
                //    {
                //        command.Notification = null;

                //        var dependency = new SqlDependency(command);
                //        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

                //        if (connection.State == ConnectionState.Closed)
                //            connection.Open();

                //        var reader = command.ExecuteReader();

                //        while (reader.Read())
                //        {
                //            messages.Add(item: new Messages { MessageID = (int)reader["MessageID"], Message = (string)reader["Message"], EmptyMessage = reader["EmptyMessage"] != DBNull.Value ? (string)reader["EmptyMessage"] : "", MessageDate = Convert.ToDateTime(reader["Date"]) });
                //        }
                //    }

                //}
                //return this.Request.CreateResponse(HttpStatusCode.OK, messages); ;
               
            }

            private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                if (e.Type == SqlNotificationType.Change)
                {
                    MessagesHub.SendMessages();
                }
            }


    viernes, 29 de mayo de 2015 18:12