【问题标题】:Ajax-Enabled WCF Service - implementing Observer Design Pattern启用 Ajax 的 WCF 服务 - 实现观察者设计模式
【发布时间】:2012-07-21 02:44:12
【问题描述】:

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

目前在我下面的客户端脚本中,我每秒调用一次 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());
    }

【问题讨论】:

    标签: c# asp.net ajax wcf observer-pattern


    【解决方案1】:

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

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

    干杯, 院长

    【讨论】:

    • 我相信我目前只能在这个项目中使用 WCF,但感谢您提供的替代方案。我一定会调查的。
    【解决方案2】:

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

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

    • HTTP polling duplex WCF channel - 这并不能完全满足您的需求,因为客户端仍会轮询客户端的更改(通知)。但是,它仍然是为您的应用程序量身定制的。
    • 如果您不能/不想使用基于轮询的 WCF 并坚持您当前的机制,我建议您将服务从 POST 更改为 GET 显然,您不必发送任何获取通知时的复杂数据。在 AJAX 场景中,GETPOST 快一点。

    【讨论】:

      【解决方案3】:

      这将在新版本的 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        相关资源
        最近更新 更多