![](/img/trans.png)
[英]Convey FaultException details from an ajax-enabled WCF service?
[英]Ajax-Enabled WCF Service - implementing Observer Design Pattern
我创建了一个Notifications系统,每次有新通知时都会通知用户。
目前在我的客户端脚本中,我每秒都调用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());
}
你喜欢使用WCF吗? SignalR可能更适合这种推送通知。
更新:只是为了澄清; SignalR抽象了一种服务器将数据推送到多个客户端的机制,其中一个客户端是JavaScript。 在客户端上,您可以挂钩处理通知的事件处理程序, 因为它们是由通知管理器发送的...
干杯,迪恩
据我对Web模型的理解,服务器(WCF服务)无法在没有客户端请求通知的情况下通知客户端(AJAX应用程序)。 这似乎是客户端和服务器之间整个请求 - 响应系统的核心。
我知道您需要这样才能使您的应用程序更有效率,并且有一些建议可能有所帮助:
POST
更改为GET
因为显然,您不必在获取通知时发送任何复杂数据。 在AJAX场景中, GET
比POST
更快。 这可以在新版本的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.