I solved the following problem using the code below, its working me.
public class SingletonDbConnect { private static SingletonDbConnect dbInstance; private static string connString = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; private readonly SqlConnection conn = new SqlConnection(connString); private SingletonDbConnect() { } public static SingletonDbConnect getDbInstance() { if (dbInstance == null) { dbInstance = new SingletonDbConnect(); } return dbInstance; } public SqlConnection getDbConnection() { try { conn.Close(); conn.Open(); } catch (SqlException e) { } finally { } return conn; } }
SqlDependencyEvent.cs
public class SqlDependencyEvent { internal static int PageLoadCounter = 0; public void getEmailMessagesByEmailId(Guid emailid) { SingletonDbConnect conn = SingletonDbConnect.getDbInstance(); using (MembersController.command = new SqlCommand(SQL.emailmessagesbyaccount_sql(), conn.getDbConnection())) { MembersController.command.Notification = null; if (MembersController.dependency == null) { MembersController.dependency = new SqlDependency(MembersController.command); MembersController.dependency.OnChange += new OnChangeEventHandler(emailMessages_OnChange); } var reader = MembersController.command.ExecuteReader(); } PageLoadCounter++; } private void emailMessages_OnChange(object sender, SqlNotificationEventArgs e) { if (e.Type == SqlNotificationType.Change) { if (MembersController.dependency != null) { MembersController.dependency.OnChange -= emailMessages_OnChange; } NotificationHub.EmailUpdateRecords(); SingletonDbConnect conn = SingletonDbConnect.getDbInstance(); using (MembersController.command = new SqlCommand(SQL.emailmessagesbyaccount_sql(), conn.getDbConnection())) { MembersController.command.Parameters.Add(new SqlParameter("@emailaccountid", defaultemailid)); MembersController.command.Notification = null; MembersController.dependency = new SqlDependency(MembersController.command); MembersController.dependency.OnChange += new OnChangeEventHandler(emailMessages_OnChange); var reader = MembersController.command.ExecuteReader(); } PageLoadCounter++; } } }
MembersController.cs
public class MembersController : Controller { SingletonDbConnect conn = SingletonDbConnect.getDbInstance(); internal static SqlCommand command = null; internal static SqlDependency dependency = null;
its solved my problem and its working, even we refresh the page more than 1, but SqlDependency will call only once. I used one of the StartController for SqlDependency and stopped its own logic, you can use the same code in Global.ascx instead of MembersController.cs
I hope this helps you solve the problem. ask me if you still have any problems.
adnan source share