我正在开展这个项目,那里有一个网站可以在实时"实时"通过远程服务器上的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实际上可以取代我在服务器和客户端上描述的功能?
另外,如果有人有同样的设置,我对你如何解决这个问题非常感兴趣:)
答案 0 :(得分:7)
是。 SignalR
WebSockets
使用WebSockets
,但不能使用TCP
。 IP
比双工服务要好得多,因为:
IP
连接双向发送数据。SignalR
(在双工服务中,它在共享{{1}}的情况下不起作用。)所以..是的。 {{1}}非常适合。