2012-07-22 48 views
3

我創建了一個通知系統,每次有新通知時都會通知用戶。支持Ajax的WCF服務 - 實現觀察者設計模式

當前在我下面的客戶端腳本中,我每秒都會調用Web服務調用來爲服務器查詢新通知。每當有新的通知時,我將如何能夠讓支持Ajax的WCF通知客戶端?

有沒有人有任何資源,建議或教程來實現觀察者設計模式使用啓用Ajax的WCF? *注意:使用Observer模式可能不是實現這一點的最佳方式,任何關於最佳模式的建議(可能是我當前的實現)都非常感謝。

客戶方:

$(document).ready(function() { 

self.setInterval("getNewNotificationsCount()", 1000); 
}); 

function getNewNotificationsCount() { 
$.ajax({ 
    type: "POST", 
    url: site_root + "services/NotificationService.svc/json/GetNewNotificationsCount", 
    contentType: "application/json; charset=utf-8", 
    data: {}, 
    dataType: "json", 
    error: function (request, error, u) { 
     alert('error: ' + error); 
    }, 
    success: function (result, status) { 
     $('#hip_badge').text(result.d); 
    } 

});} 

通知服務

[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
public class NotificationService { 

{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)] 
    public int GetNewNotificationsCount() 
    { 
     NotificationManager nm = new NotificationManager(); 

     return nm.getNewNotifications(GetUserName()); 
    } 

回答

0

至於我的網絡模型的理解去,有沒有方式服務器(WCF服務)可以通知客戶端(AJAX應用程序),而無需客戶端請求通知。這似乎是客戶端和服務器之間整個請求 - 響應系統的核心。

我知道你需要這使應用程序更高效,也有一些建議,可以幫助:

  • HTTP polling duplex WCF channel - 這不正是給你想要的東西,因爲客戶端仍然會向客戶端投票更改(通知)。但是,它仍然是爲您的應用程序中的內容量身定製的。
  • 如果您不能/不想使用基於輪詢的WCF並堅持使用您當前的機制,我建議您將服務從POST更改爲GET顯然,您不必在提取時發送任何複雜數據通知。在AJAX場景中,GETPOST快一些​​。
1

你綁到使用WCF? SignalR可能更適合這種推送通知。

更新:只是爲了澄清; SignalR抽象了一個服務器將數據推送到多個客戶端的機制,其中一個是JavaScript。在客戶端上可以掛接事件處理程序使用通知因爲它們是由您的通知管理器發送處理...

乾杯, 院長

+0

我相信我目前僅限於使用WCF進行此項目,但感謝您的選擇。我一定會考慮這個。 – jocey 2012-07-22 19:11:26