방금 SignalR
을 사용하고 다른 구성 및 여러 질문에 따라 설치 구성을 시작했습니다. 나는 매 단계마다 따라왔다. 종속성 OnChange
이 실행되지 않는 이유를 알아낼 수 없습니까?SqlDependency.OnChange dependency_OnChange가 실행되지 않았습니다.
[HubName("broadcastHub")]
public class BroadcastHub : Hub
{
[HubMethodName("sendNotifications")]
public Task<object> SendNotifications()
{
DataTable dt = new DataTable();
using (var connection = new SqlConnection(strConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
var reader = command.ExecuteReader();
dt.Load(reader);
connection.Close();
}
}
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BroadcastHub>();
var json = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
return (context.Clients.All.RecieveNotification(json));
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
SendNotifications();
}
}
}
처음에는 정상적으로 작동하며 예상되는 데이터를 얻습니다. 변경이 표에서 이루어집니다하지만 그것은 dependency_OnChange
가 나는 또한 브로커 서비스는 다음과 같은 쿼리를 사용하여 설정되어 있는지 확인한 발생하지 않습니다 - 모두 enabled
과 가치를하다
select is_broker_enabled from sys.databases where name='msdb'
select is_broker_enabled from sys.databases where name='mydb'
1
입니다. 내가 SendNotifications
에서 사용하고
쿼리는 다음과 같습니다 -
select Id,OXEName,OXEIP IP,ConnectionStatus Status, Case WHEN ConnectedOxeIP IS NULL OR ConnectedOxeIP = '' THEN OXEIP ELSE ConnectedOxeIP END as ConnectedOxeIP from PBXDetail
자바 스크립트
$(function() {
var notifications = $.connection.broadcastHub;
notifications.client.recieveNotification = function (response) {
};
$.connection.hub.start().done(function() {
notifications.server.sendNotifications();
}).fail(function (e) {
});
});
에게
[assembly: OwinStartup(typeof(myNameSpace.Startup))]
namespace myNameSpace
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(new HubConfiguration() { EnableJSONP = true });
}
}
}
Startup.cs
Global.asax에
protected void Application_Start(object sender, EventArgs e)
{
System.Data.SqlClient.SqlDependency.Start(strConnectionString);
}
protected void Application_End(object sender, EventArgs e)
{
System.Data.SqlClient.SqlDependency.Stop(strConnectionString);
}