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

时间:2014-01-21 08:13:47

标签: c# asp.net .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)

在我的控制器中:

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);
    }
}

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

另外,如果有人有同样的设置,我对你如何解决这个问题非常感兴趣:)

1 个答案:

答案 0 :(得分:7)

是。 SignalR WebSockets使用WebSockets,但不能使用TCPIP比双工服务要好得多,因为:

  1. 它使用单个IP连接双向发送数据。
  2. 服务器不需要知道客户端的SignalR(在双工服务中,它在共享{{1}}的情况下不起作用。)
  3. 所以..是的。 {{1}}非常适合。

相关问题