2016-09-08 6 views
0

Вот мой код:SqlDependency на смену не всегда стрельбы

Public Sub RegisterNotification() 
    Dim conStr As String = ConfigurationManager.ConnectionStrings("sqlConString").ConnectionString 
    Dim sqlCommand As String = "SELECT [ID],[Description], [CreateDate], [NoteTypeID] from [note].[Notes]" 

    Using con As New SqlConnection(conStr) 
     Dim cmd As New SqlCommand(sqlCommand, con) 
     If con.State <> System.Data.ConnectionState.Open Then 
      con.Open() 
     End If 
     cmd.Notification = Nothing 
     Dim sqlDep As New SqlDependency(cmd) 
     AddHandler sqlDep.OnChange, AddressOf sqlDep_OnChange 

     Using reader As SqlDataReader = cmd.ExecuteReader() 
     End Using 
    End Using 
End Sub 

Private Sub sqlDep_OnChange(sender As Object, e As SqlNotificationEventArgs) 
    If e.Type = SqlNotificationType.Change Then 
     Dim sqlDep As SqlDependency = TryCast(sender, SqlDependency) 
     'Dim id 
     RemoveHandler sqlDep.OnChange, AddressOf sqlDep_OnChange 

     If e.Info = 1 Then 


      Dim notificationHub = GlobalHost.ConnectionManager.GetHubContext(Of NotificationHub)() 
      notificationHub.Clients.All.notify("added") 
      RegisterNotification() 
      'GetNotificationList(0, 1) 
     End If 


    End If 
End Sub 

Global.asax код:

Protected Sub Application_Start() 
    Try 
     Dim _obj As New DAL.sap.Register 
     _obj.Register() 
     AreaRegistration.RegisterAllAreas() 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters) 
     RouteConfig.RegisterRoutes(RouteTable.Routes) 
     BundleConfig.RegisterBundles(BundleTable.Bundles) 
     WebSecurity.InitializeDatabaseConnection("DefaultConnection", "webpages_UserProfile", "UserId", "UserName", True) 


     SqlDependency.Start(con) 
    Catch ex As Exception 

    End Try 



End Sub 

Protected Sub Session_Start(sender As Object, e As EventArgs) 
    Try 
     Dim NC As New NotificationComponent()    
     NC.RegisterNotification() 
    Catch ex As Exception 

    End Try 

End Sub 
Protected Sub Application_End() 
    Try 
     SqlDependency.Stop(con) 
    Catch ex As Exception 

    End Try 

End Sub 

код запуска:

<Assembly: OwinStartupAttribute(GetType(www.Startup))> 

пространство имен WWW Partial Public Class Startup Public Sub Configuration (приложение As IAppBuilder) app.MapSignalR() End Sub End Class End Namespace

Моя проблема sqldep_onchange не всегда стрельбы. Иногда он работает отлично, но иногда ничего не происходит. это ошибка или что-то в этом роде? что я делаю неправильно?

ответ

0

Похоже, все правильно, хотя мой VB чрезвычайно ржавый, я бы попытался удалить if в SqlNotificationType и посмотреть, поможет ли это, возможно, это слишком ограничивает, я также должен убедиться, что на самом деле это зависимость, которая не стреляет, а что-то еще глотает его позже в цепочке. Также, что произойдет, если ваш TryCast не удастся? Поскольку он не в попытке, он не будет бросать, и ваши уведомления не будут срабатывать, и ваш новый обработчик не будет добавлен.

Private Sub sqlDep_OnChange(sender As Object, e As SqlNotificationEventArgs) 
If e.Type = SqlNotificationType.Change Then 
    Dim sqlDep As SqlDependency = TryCast(sender, SqlDependency) 
    'Dim id 

    Delete --> ***RemoveHandler sqlDep.OnChange, AddressOf sqlDep_OnChange*** <--Delete 

    If e.Info = 1 Then 


     Dim notificationHub = GlobalHost.ConnectionManager.GetHubContext(Of NotificationHub)() 
     notificationHub.Clients.All.notify("added") 
     RegisterNotification() 
     'GetNotificationList(0, 1) 
    End If 


End If 

End Sub

+0

Я попытался, что у предложил, и ничего не происходит, и он не бросает исключение. Когда я запускаю свое приложение, он отлично работает, но, возможно, через 10-15 минут он не срабатывает. – user3188649

+0

Проверьте, зарегистрированы ли у вас какие-либо обработчики, одна строка кода, которая навязывается мне, заключается в том, что вы немедленно удаляете обработчик, не проверяя, есть ли более одного ... если вы удалите только обработчик, тогда он прекратит стрельбу. –

+0

Вы получили эту работу? –