2012-07-22 47 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