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实际上可以取代我在服务器和客户端上面描述的功能?
此外,如果有人有相同的设置我很高兴听到你如何解决这个问题:)
是.在可能的地方SignalR使用WebSockets,并且在不能的地方使用后备.WebSockets比双工服务要好得多,因为:
TCP连接以双向方式发送数据.IP(它在双工服务中,在共享的情况下不起作用IP).所以..是的.SignalR很合适.