我正在从事这个项目,其中有一个网站通过远程服务器上的 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
比双工服务好得多,因为:
- 它使用单个
TCP
连接双向发送数据。 - 服务器不需要知道客户端的
IP
(它在双工服务中知道,这在共享IP
的情况下不起作用)。
所以.. 是的。 SignalR
非常适合。
关于c# - 我应该考虑在 WCF 双工服务上使用 SignalR 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21252536/