Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多次触发客户端集线器事件的信号器_C#_Asp.net Mvc_Signalr_Signalr Hub_Sqldependency - Fatal编程技术网

C# 多次触发客户端集线器事件的信号器

C# 多次触发客户端集线器事件的信号器,c#,asp.net-mvc,signalr,signalr-hub,sqldependency,C#,Asp.net Mvc,Signalr,Signalr Hub,Sqldependency,我正在使用带有SQLDependency的SignalR,以便在SQL Server数据库中的一个表发生更改时获取通知。 通知工作正常-但我看到一个问题。随着数据库中的更改越来越多,SignalR看起来会为数据库中的单个更改触发多个客户端中心事件 查看控制台,我得到以下信息: [16:32:30 GMT-0700(太平洋夏令时)]信号器:在集线器“MessangerHub”上触发客户端集线器事件“sendMessage” [16:32:30 GMT-0700(太平洋夏令时)]信号器:在集线器“M

我正在使用带有SQLDependency的SignalR,以便在SQL Server数据库中的一个表发生更改时获取通知。 通知工作正常-但我看到一个问题。随着数据库中的更改越来越多,SignalR看起来会为数据库中的单个更改触发多个客户端中心事件

查看控制台,我得到以下信息:

[16:32:30 GMT-0700(太平洋夏令时)]信号器:在集线器“MessangerHub”上触发客户端集线器事件“sendMessage”

[16:32:30 GMT-0700(太平洋夏令时)]信号器:在集线器“MessangerHub”上触发客户端集线器事件“sendMessage”。

事件似乎被多次触发。 任何帮助都将不胜感激

public IEnumerable<Internal.Core.Model.ShipmentStatusInfo> GetShipments(DateTime lastStatusUpdatedDate)
    {
        using (var conn = new SqlConnection(Config.Instance.ShipmentConnection))
        {
            conn.Open();
            var q = "SELECT dbo.Shipment.ShipmentID, dbo.Shipment.[STATUS], dbo.Shipment.[LAST_MODIFIED_DATE] "+
                    " FROM dbo.Shipment WHERE name like  @name and  [Shipment].[LAST_MODIFIED_DATE] > @date";


            using (var cmd = new SqlCommand(q, conn))
            {
                cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = lastStatusUpdatedDate;
                cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = Config.Instance.Name; 
                SqlDependency dependency = new SqlDependency(cmd);
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                using (var reader = cmd.ExecuteReader())
                {
                    return reader.Cast<IDataRecord>().Select(x => new Internal.Core.Model.ShipmentStatusInfo()
                    {
                        ShipmentId = x.GetString(0),
                        Status = x.GetString(1)
                    }).ToList();
                }

            }
        }
    }

    void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change || e.Info == SqlNotificationInfo.Update || e.Info == SqlNotificationInfo.Insert)
        {
            StatusUpdateHub.Send();
        }
    } 
public IEnumerable GetShippings(DateTime LastStatusUpdateDate)
{
使用(var conn=newsqlconnection(Config.Instance.ShipmentConnection))
{
conn.Open();
var q=“选择dbo.shipping.ShipmentID,dbo.shipping.[STATUS],dbo.shipping.[LAST\u MODIFIED\u DATE]”+
“来自dbo.shipping,其中名称如@name和[shipping]。[上次修改日期]>@DATE”;
使用(var cmd=new SqlCommand(q,conn))
{
cmd.Parameters.Add(“@date”,SqlDbType.DateTime).Value=lastStatusUpdateDate;
cmd.Parameters.Add(“@name”,SqlDbType.VarChar).Value=Config.Instance.name;
SqlDependency=新的SqlDependency(cmd);
dependency.OnChange+=新的OnChangeEventHandler(dependency\u OnChange);
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
使用(var reader=cmd.ExecuteReader())
{
return reader.Cast().Select(x=>new Internal.Core.Model.ShipmentStatusInfo())
{
ShipmentId=x.GetString(0),
Status=x.GetString(1)
}).ToList();
}
}
}
}
void dependency_OnChange(对象发送方,SqlNotificationEventArgs e)
{
if(e.Type==SqlNotificationType.Change | | e.Info==SqlNotificationInfo.Update | | e.Info==SqlNotificationInfo.Insert)
{
StatusUpdateHub.Send();
}
} 

显示您的代码。另外,你正在做这样的事情:谢谢你的时间。我已经包括了我的代码。我的做法有点不同。上面复制的日志是从您的hub方法还是从javascript客户端复制的?客户端是javasript吗?在hub方法中添加断点并查看调用该方法的时间和原因也可能很有用。问题是,只有在部署到服务器后,才会发生多次调用。这在我的开发环境中从未发生过,通过放置断点无法看到它。