schemas query postquerynotification notification net microsoft how habilitar dependency asp c# sql-server-2008 .net-4.5 sqldependency

c# - query - SqlDependency pierde suscripción a lo largo del tiempo



sql server query notification (1)

He estado usando SqlDependency en una aplicación .NET 3.5 durante más de 3 años sin ningún problema. El escenario es el siguiente:

  1. Servicio de Windows central con una SqlDependency viendo una tabla (llamemos a esta Tabla A)
  2. Múltiples usuarios que usan una aplicación WPF con una SqlDependency única por usuario que mira una tabla (Tabla A nuevamente)
  3. El usuario pone en cola una unidad de trabajo para su procesamiento en la Tabla A
  4. SqlDependency dispara al servicio de Windows
  5. El servicio de Windows procesa todos los elementos pendientes en la Tabla A y guarda los resultados en la Tabla A
  6. Incendios únicos de SqlDependency para cada usuario cuyos resultados están disponibles
  7. El usuario procesa su trabajo

Recientemente, actualicé el sistema a .NET 4.5 y empecé a ver problemas donde los cambios se incluirían en la tabla que estamos monitoreando, pero la SqlDependency nunca se SqlDependency (tanto en el servicio como en la aplicación del usuario). Comencé a profundizar más en esto y noté en mis registros que en algún momento volvería a registrar la SqlDependency , pero luego la notificación nunca se dispararía después de eso.

Después de ver este comportamiento, decidí ejecutar el generador de perfiles en SQL Server para capturar eventos de suscripción. A partir de los datos que se capturaron, noté que, a veces, un usuario registraba una suscripción (con un ID único), pero luego otro usuario la disparaba (con el mismo ID único). Esto normalmente ocurre con el servicio que mencioné anteriormente y uno o más de los usuarios de la aplicación WPF. (He adjuntado una captura de pantalla del problema en los resultados del perfilador)

¿Es este comportamiento esperado? ¿Que se puede disparar una notificación para un usuario diferente de lo que fue registrado? ¿Esto apunta a un problema en la capa de aplicación? Cualquier ayuda es apreciada.


Dado que se están creando varias instancias de SqlDependency, verificaría las Suscripciones duplicadas, tal como se describe here . Las suscripciones se pueden considerar duplicadas según su configuración. El comportamiento "significa que si se solicita una notificación para consultas idénticas, solo se envía una notificación".

Otra cosa que debes comprobar es si el evento OnChange podría estar funcionando realmente, pero no aparecería debido a que se activa un hilo diferente. La naturaleza de subprocesos múltiples de SqlDependency se observa here .

El rastreo de Profiler indica que Service Broker está haciendo su trabajo. Agregar un seguimiento adicional en los niveles .NET mostraría si la suscripción se activa a nivel de la base de datos, pero no da como resultado la activación del evento OnChange. Se pueden encontrar consejos adicionales para la solución de problemas here .