2015-01-05 4 views
0

sqldependency를 사용하여 데이터베이스 변경 사항을 확인한 다음 signalr에 연결된 클라이언트에 무언가를 보냅니다. 문제는 변화를 감지하지 못하는 것 같습니다. 나는 무언가가 빠진 theres를 느낀다. 코드를 heres :sqldependency가 변경을 감지하지 못합니다. 내가 뭘 놓치고 있니?

[HubName("DataHub")] 
public class DataHub : Hub 
{ 
    public void pushOnChange() 
    { 
     string connection = "data source=fourthD;initial catalog=dash;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework""; 
     SqlDependency.Start(connection); 
     SqlConnection connectionString = new SqlConnection(connection); 
     connectionString.Open(); 

     using (SqlCommand command=new SqlCommand("SELECT * FROM dbo.insight", connectionString)) 
     { 
      command.Notification = null; 
      SqlDependency dependency = new SqlDependency(command); 
      dependency.OnChange += new OnChangeEventHandler(OnDependencyChange); 
      command.ExecuteReader(); 
     } 
    } 


    void OnDependencyChange(object sender, SqlNotificationEventArgs e) 
    { 
     Dictionary<string, string> data = new Dictionary<string, string> { }; 
     data.Add("Id","34"); 
     data.Add("DeviceId", "163-117") 
     data.Add("DeviceUserName", "Someone"); 

     var result = new[] { data }; 

     Clients.All.addData(result); 
    } 
} 
+1

어쩌면 무엇인가를 먼저 읽어야합니까? – Reniuz

+0

또한 코드를 올바르게 들여 쓰는 것이 일반적으로 특성으로 간주됩니다. 잘못 들여 쓰기 된 코드는 읽을 수 없습니다. – Tomalak

+0

코드에 대해 죄송합니다 .. 어떤 해결책이 있습니까? – EnderCode

답변

0

문제는 SqlDependency resubscription이 필요하다는 것입니다. 따라서 다음과 같이 OnDependencyChange 메서드를 수정해야합니다.

void OnDependencyChange(object sender, SqlNotificationEventArgs e) 
{ 
    // Resubscription 
    using (SqlCommand command=new SqlCommand("SELECT * FROM dbo.insight" 
      , connectionString)) 
    { 
     command.Notification = null; 
     SqlDependency dependency = new SqlDependency(command); 
     dependency.OnChange += new OnChangeEventHandler(OnDependencyChange); 
     command.ExecuteReader(); 
    } 

    Dictionary<string, string> data = new Dictionary<string, string> { }; 
    data.Add("Id","34"); 
    data.Add("DeviceId", "163-117") 
    data.Add("DeviceUserName", "Someone"); 

    var result = new[] { data }; 

    Clients.All.addData(result); 
} 

희망이 있습니다.