SignalR设置不正确?

时间:2014-04-09 19:14:04

标签: c# asp.net-mvc signalr asp.net-mvc-5 signalr-hub

很明显,我搞砸了,但似乎我已经正确地遵循了文档,所以我要求一些见解。

我构建了一个简单的ASP.NET MVC5应用程序,我正在测试文件状态的异步通知。作为概念证明我:

  • 来自NuGet的已安装SignalR
  • 添加了对我的布局页面的脚本引用
  • 添加了“〜/ signalr / hubs”
  • 的“脚本”引用

我创建了一个新的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'); });
    });

...现在正在达到断点。然而,我所有的变量都回归未定义......我将不得不玩这个。我希望它与我的大写有关。

1 个答案:

答案 0 :(得分:4)

您对$.connection.hub.start()的电话在哪里?定义$.connection.notificationHub.client.notify后会调用此方法吗?

如果在开始连接之前未定义客户端notify回调,则不会订阅NotificationHub。这可能就是为什么永远不会调用包含您对notify的调用的$.pnotify回调。

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#establishconnection