我创建了一个通知系统,每次有新通知时都会通知用户。
目前在我的客户端脚本中,我每秒都会调用Web服务调用来ping服务器以获取新通知。如果有新的通知,我怎样才能让支持Ajax的WCF通知客户端?
是否有人有任何资源,建议或教程来使用支持Ajax的WCF实现Observer设计模式?
*注意:使用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 :(得分:1)
您是否与使用WCF相关联? SignalR可能更适合此类推送通知。
更新:只是为了澄清; SignalR抽象了一种服务器将数据推送到多个客户端的机制,其中一个客户端是JavaScript。在客户端上,您可以挂钩事件处理程序,处理通知管理器发送的通知 ...
干杯, 迪安
答案 1 :(得分:0)
就我对Web模型的理解而言,如果没有客户端请求通知,服务器(WCF服务)就无法通知客户端(AJAX应用程序)。这似乎是客户端和服务器之间整个请求 - 响应系统的核心。
我知道您需要这样才能提高您的应用效率,并且有一些建议可能有所帮助:
POST
更改为GET
,因为显然,您不会必须在获取通知时发送任何复杂数据。在AJAX场景中,GET
比POST
快一点。答案 2 :(得分:0)
这可以在新版本的WCF(4.5)中实现。您可以使用Websockets与HTTP客户端进行双向通信。你不会再使用AJAX,而是使用带有websockets的javascript。有关详细信息,请查看以下链接:http://www.codeproject.com/Articles/338789/What-s-new-in-WCF-4-5-WebSocket-support-Part-1-of