我应该考虑使用SignalR而不是WCF双工服务吗?

Nic*_*ger 8 .net c# asp.net wcf signalr

我正在开发这个项目,其中有一个网站通过远程服务器上的wcf双工服务"实时"获取数据.更新的频率约为一秒,我使用SignalR客户端来更新视图.(每次有来自服务的传入"数据包",我都会通知我的客户).

目前,由于双工服务的工作方式,我遇到了此解决方案的一些问题.每当与后端服务器没有"实时"连接时,它就会向数据库提供最新的数据库条目.这是有效的,但我的客户看来似乎没有正确地接受这一点.如果我尝试刷新视图,它实际上是随机更新的值.(调试时,值都在notify-methods中)

我已经尝试使用jquery/ajax在我的控制器中调用一个方法来设置这样的连接:

setTimeout(function() {

        $.ajax({
            type: 'GET',
            url: '@Url.Action("ConnectToDataSources", "Fleet")', 
            cache: false,
            success: function (result) {

            }
        });
}, 1000)
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

public void ConnectToDataSources()
{
    UnitContract[] listOfUnitsFromService = UnitClient.GetUnits(false, "", false);

    Model = new FleetModel
    {
        UnitDetails = GenerateUnitDetails(listOfUnitsFromService.ToList()),
    };

    foreach (UnitDetailsModel unit in Model.UnitDetails)
    {
        var ods = new OperationDataSource();
        var ads = new ActivityStatusDataSource();

        ads.Start(unit.UnitId, ActivityReceived, AliveReceived);
        ods.Start(DataReceived, unit.UnitId);
        _dataSources.Add(ods);
        _activityStatusDataSources.Add(ads);
    }
}
Run Code Online (Sandbox Code Playgroud)

经过大量的反复试验后,我考虑将后端服务改为使用SignalR.我是否正确理解SignalR实际上可以取代我在服务器和客户端上面描述的功能?

此外,如果有人有相同的设置我很高兴听到你如何解决这个问题:)

i3a*_*non 7

是.在可能的地方SignalR使用WebSockets,并且在不能的地方使用后备.WebSockets比双工服务要好得多,因为:

  1. 它使用单个TCP连接以双向方式发送数据.
  2. 服务器不需要知道客户端IP(它在双工服务中,在共享的情况下不起作用IP).

所以..是的.SignalR很合适.