c# - 我应该考虑在 WCF 双工服务上使用 SignalR 吗?

标签 c# asp.net .net wcf signalr

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

目前,由于双工服务的工作方式,我在使用此解决方案时遇到了一些问题。每当没有“实时”连接到后端服务器并为其提供数据时,该服务就应该将最新的数据库条目推送到我的客户端。这行得通,但我的客户观点似乎没有正确地接受这一点。如果我尝试刷新 View ,实际上会随机更新不时更新的值。 (调试时,值都在notify-methods中)

我试过使用 jquery/ajax 在我的 Controller 中调用一个方法来设置这样的连接:

setTimeout(function() {

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

            }
        });
}, 1000)

在我的 Controller 中:

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 实际上可以替代我在服务器和客户端上描述的上述功能?

另外,如果有人有相同类型的设置,我非常想听听您是如何解决这个问题的:)

最佳答案

是的。 SignalR 在可以使用的地方使用 WebSockets,在不能使用的地方使用回退。 WebSockets 比双工服务好得多,因为:

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

所以.. 是的。 SignalR 非常适合。

关于c# - 我应该考虑在 WCF 双工服务上使用 SignalR 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21252536/

相关文章:

c# - 如何将对象转换为 Action<T>

c# - 使用 NuGet 构建时的长路径

ASP.NET 4.5 Web.config 错误

c# - 如何在 MongoDB C# 中使用地理空间查询?

c# - 如何在 Visual Studio 2019 和 .NET Core 3.0 中使用 ODBC 连接?

c# - TagHelper 指定有效属性

c# - 页面过期时 Asp.net c# 301 重定向

c# - 如何在值返回方法中使用 try catch block ?

.net - 如何找到特定 dll 的 PublicKeyToken?

c# - MVC4 添加 header 到重定向响应不起作用