我构建了一个简单的ASP.NET MVC5应用程序,我正在测试文件状态的异步通知。作为概念证明我:
我创建了一个新的NotificationHub,如下所示:
public class Notification
{
public MessageLevels Type { get; set; }
public string Message { get; set; }
public string Title { get; set; }
}
public enum MessageLevels
{
Success,
Info,
Notice,
Error
}
public class NotificationHub : Hub
{
public void Notify(Notification model)
{
Clients.Caller.notify(model);
}
}
在此之后,我将以下通知脚本添加到我的布局页面:
$(function() {
var messages = $.connection.notificationHub;
messages.client.notify = function(model) {
$.pnotify({
title: model.title,
text: model.message,
type: model.type
});
};
});
在我的控制器中,我有类似的东西来测试通知:
public ActionResult Index()
{
System.Threading.ThreadPool.QueueUserWorkItem(state => SendNotification());
return View();
}
private void SendNotification()
{
Thread.Sleep(3500);
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.All
.Notify(new Notification
{
Message = "This is a test.",
Title = "Test Message",
Type = MessageLevels.Notice
});
}
当我运行它时,我正在网络浏览器中监视以下行:
$.pnotify({
...但是,我的断点永远不会到达。
有人可以建议我做错了吗?
更新
根据halter73的回答,我将脚本更改为:
$(function() {
var connection = $.hubConnection();
var notificationHubProxy = connection.createHubProxy('notificationHub');
notificationHubProxy.on('notify', function(model) {
$.pnotify({
title: model.title,
text: model.message,
type: model.type
});
});
connection.start()
.done(function() { console.log('Now connected, connection ID=' + connection.id); })
.fail(function() { console.log('Could not connect'); });
});
...现在正在达到断点。然而,我所有的变量都回归未定义......我将不得不玩这个。我希望它与我的大写有关。
答案 0 :(得分:4)
您对$.connection.hub.start()
的电话在哪里?定义$.connection.notificationHub.client.notify
后会调用此方法吗?
如果在开始连接之前未定义客户端notify
回调,则不会订阅NotificationHub
。这可能就是为什么永远不会调用包含您对notify
的调用的$.pnotify
回调。