Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# 向R发送多个Web API请求的信号_C#_Asp.net_Asp.net Web Api_Signalr - Fatal编程技术网

C# 向R发送多个Web API请求的信号

C# 向R发送多个Web API请求的信号,c#,asp.net,asp.net-web-api,signalr,C#,Asp.net,Asp.net Web Api,Signalr,您好,有人能帮我解决信号器中的问题吗?我已经创建了一个示例实时数据库。当我更改数据库中的一些数据时,我在API中收到多个请求,这样可以吗?或者它有性能问题 我收到了来自API的1278个请求,我只更改了数据库中数据的一个值 我的Sql代码 public IEnumerable<Vehicles> Read(OnChangeEventHandler dependency) { var list = new List<Vehicles>();

您好,有人能帮我解决信号器中的问题吗?我已经创建了一个示例实时数据库。当我更改数据库中的一些数据时,我在API中收到多个请求,这样可以吗?或者它有性能问题

我收到了来自API的1278个请求,我只更改了数据库中数据的一个值

我的Sql代码

   public IEnumerable<Vehicles> Read(OnChangeEventHandler dependency)
    {
        var list = new List<Vehicles>();

        using (Con)
        {
            Con.Open();
            Cmd.CommandType = CommandType.StoredProcedure;
            Cmd.CommandText = _proc.ReadVehicle;

            Cmd.Notification = null;

            var sqlDependency = new SqlDependency(Cmd);
            sqlDependency.OnChange += new OnChangeEventHandler(dependency);


            if (Con.State == ConnectionState.Closed)
            {
                Con.Open();
            }


            using (var reader = Cmd.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        list.Add(new Vehicles
                        {
                            Id = Convert.ToInt16(reader["Id"]),
                            Car = reader["Car"].ToString(),
                            Brand = reader["Brand"].ToString(),
                            Company = reader["Company"].ToString(),
                            Image = reader["Image"].ToString(),
                            LifeTime = Convert.ToInt16(reader["LifeTime"]),
                            Price = Convert.ToDecimal(reader["Price"]),
                            Type = reader["Type"].ToString(),
                            Year = reader["Year"].ToString()
                        });
                    }
                }
            }
        }

        return list;
    }
我的信号集线器

[HubName("VehicleHub")]
public class VehicleHub : Hub
{

    [HubMethodName("getAllVehicles")]
    public void GetVehicles()
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<VehicleHub>();
        context.Clients.All.getAllVehicles();
    }

}
[HubName(“VehicleHub”)]
公共级车辆枢纽:枢纽
{
[HubMethodName(“getAllVehicles”)]
公共交通工具()
{
IHubContext context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.getAllVehicles();
}
}
我的客户端脚本

     $(function () {

         var vehicles = $.connection.VehicleHub;
         vehicles.client.getAllVehicles = function () {
             getVehicles()

        };

         $.connection.hub.start();
         getVehicles()

    });

    function getVehicles() {

        var tbl = $('#carTable');
        $.ajax({
            url: 'http://localhost:62734/api/vehicle',
            contentType: 'application/html ; charset:utf-8',
            type: 'GET',
            dataType: 'json',
            success: function (result) {
                tbl.empty();
                $.each(result, function (key, value) {
                    tbl.append('<tr>' +
                        '<td>' + value.Id + '</td>' +
                        '<td>' + value.Car + '</td>' +
                        '<td>' + value.Brand + '</td>' +
                        '<td>' + value.Type + '</td>' +
                        '</tr>');
                }
                )
            }
        });
    }
$(函数(){
var车辆=$.connection.VehicleHub;
vehicles.client.getAllVehicles=函数(){
getVehicles()
};
$.connection.hub.start();
getVehicles()
});
函数getVehicles(){
变量tbl=$(“#可移动”);
$.ajax({
网址:'http://localhost:62734/api/vehicle',
contentType:'应用程序/html;字符集:utf-8',
键入:“GET”,
数据类型:“json”,
成功:功能(结果){
tbl.empty();
$。每个(结果、函数(键、值){
tbl.附加(“”)+
''+value.Id+''值+
''价值+汽车+''+
''价值+品牌+''+
''+值。类型+''+
'');
}
)
}
});
}

可以,它显示多个请求的原因是,它使用长池而不是Web套接字,在您的本地测试中,您似乎没有在IIS Express中启用Web套接字

在Web套接字中,一个连接保持打开状态,服务器和客户端可以定期相互ping以确保两者都已连接

长轮询就是这样工作的,http连接打开,客户端等待更新,如果服务器有任何更新,它将向客户端发送更新,或者它将最终关闭并允许客户端重新打开连接,以确保两者都是活动的。由于服务器无法在长轮询中接收来自客户端的ping,服务器关闭,客户端重新打开逻辑上用作ping的连接,以确保两者都已连接


通过Windows功能,您可以安装IIS Express的Web套接字支持,这些多个连接将替换为Web套接字,您将不会看到很多请求。

是的,它显示多个请求的原因是,它使用长池而不是Web套接字,在本地测试中,您似乎没有在IIS Express中启用web套接字

在Web套接字中,一个连接保持打开状态,服务器和客户端可以定期相互ping以确保两者都已连接

长轮询就是这样工作的,http连接打开,客户端等待更新,如果服务器有任何更新,它将向客户端发送更新,或者它将最终关闭并允许客户端重新打开连接,以确保两者都是活动的。由于服务器无法在长轮询中接收来自客户端的ping,服务器关闭,客户端重新打开逻辑上用作ping的连接,以确保两者都已连接

通过Windows功能,您可以安装IIS Express的Web套接字支持,这些多个连接将替换为Web套接字,您将不会看到很多请求

     $(function () {

         var vehicles = $.connection.VehicleHub;
         vehicles.client.getAllVehicles = function () {
             getVehicles()

        };

         $.connection.hub.start();
         getVehicles()

    });

    function getVehicles() {

        var tbl = $('#carTable');
        $.ajax({
            url: 'http://localhost:62734/api/vehicle',
            contentType: 'application/html ; charset:utf-8',
            type: 'GET',
            dataType: 'json',
            success: function (result) {
                tbl.empty();
                $.each(result, function (key, value) {
                    tbl.append('<tr>' +
                        '<td>' + value.Id + '</td>' +
                        '<td>' + value.Car + '</td>' +
                        '<td>' + value.Brand + '</td>' +
                        '<td>' + value.Type + '</td>' +
                        '</tr>');
                }
                )
            }
        });
    }