2014-01-21 57 views
8

我正在從事這個項目,其中有一個網站通過遠程服務器上的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實際上可以取代上面在服務器和客戶端上描述的功能?

此外,如果任何人有同樣的這種設置,我聽力非常感興趣,你是如何解決這個問題:)

回答

6

是。 SignalR使用WebSockets它可以在那裏它不能和後備。 WebSockets是不是因爲雙工服務更好:

  1. 它使用一個單一的TCP連接發送數據的兩種方式。
  2. 服務器不需要知道客戶端的IP(它在雙工服務中,在共享IP的情況下不起作用)。

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

+0

你不能說「WebSocket比雙工服務好得多」,因爲一個是協議,另一個是允許你使用支持雙向傳輸的任何協議的框架(或者甚至不支持,比如在wsDualHttpBinding的情況下) ,包括WebSockets。當這個答案發布時,有netHttpBinding左右,它原生支持雙工WCF over WebSockets –

+0

@VitaliyUlantikov這個答案是18個月大,我沒有回憶它。如果您對此有更多瞭解,歡迎您隨時編輯它。 – i3arnon

相關問題