我正在從事這個項目,其中有一個網站通過遠程服務器上的wcf雙工服務「實時」獲取feeded數據。這些更新的頻率約爲1秒,我使用SignalR客戶端來更新視圖。 (每次有來自服務的傳入'數據包',我都會通知我的客戶)。我應該考慮通過WCF雙工服務使用SignalR嗎?
由於雙工服務的工作方式,目前我遇到了此解決方案的一些問題。每當沒有「後臺服務器與數據提供」實時「連接時,服務應該將最新的數據庫條目推送到我的客戶端。這是有效的,但我的客戶認爲似乎沒有適當地拿起這個。如果我試圖刷新視圖,那麼它實際上是隨機更新的值。 (調試時,值都出現在通知的方法)
我使用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實際上可以取代上面在服務器和客戶端上描述的功能?
此外,如果任何人有同樣的這種設置,我聽力非常感興趣,你是如何解決這個問題:)
你不能說「WebSocket比雙工服務好得多」,因爲一個是協議,另一個是允許你使用支持雙向傳輸的任何協議的框架(或者甚至不支持,比如在wsDualHttpBinding的情況下) ,包括WebSockets。當這個答案發布時,有netHttpBinding左右,它原生支持雙工WCF over WebSockets –
@VitaliyUlantikov這個答案是18個月大,我沒有回憶它。如果您對此有更多瞭解,歡迎您隨時編輯它。 – i3arnon