3

我创建了一个通知系统,每次有新通知时都会通知用户。

目前在我下面的客户端脚本中,我每秒调用一次 Web 服务调用来 ping 服务器以获取新通知。每次有新通知时,我如何能够让启用 Ajax 的 WCF 通知客户端?

是否有人有任何资源、建议或教程来使用支持 Ajax 的 WCF 实现观察者设计模式?

*注意:使用观察者模式可能不是实现这一点的最佳方式,任何关于最佳模式的建议(可能是我当前的实现)都非常感谢。

客户端:

$(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());
    }
4

3 回答 3

1

您是否与使用 WCF 相关?SignalR可能更适合这种推送通知。

更新:只是为了澄清;SignalR 为服务器抽象了一种将数据推送到多个客户端的机制,其中一个是 JavaScript。在客户端上,您可以挂钩处理通知管理器发送的通知的事件处理程序......

干杯,院长

于 2012-07-22T19:01:59.440 回答
0

就我对 Web 模型的理解而言,如果没有客户端请求通知,服务器(WCF 服务)就无法通知客户端(AJAX 应用程序)。这似乎是客户端和服务器之间整个请求响应系统的核心。

我知道您需要这样做来提高您的应用程序的效率,并且有一些建议可能会有所帮助:

  • HTTP 轮询双工 WCF 通道- 这并不能完全提供您想要的,因为客户端仍会轮询客户端的更改(通知)。但是,它仍然是为您的应用程序量身定制的。
  • 如果您不能/不想使用基于轮询的 WCF 并坚持您当前的机制,我建议您将服务从 aPOST更改GET为显然,您不必在获取通知时发送任何复杂的数据。AGETPOSTAJAX 场景中的 a 快一点。
于 2012-07-22T19:22:27.577 回答
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

于 2012-07-25T09:32:27.743 回答