带有MVC4的SignalR,无法从控制器上执行操作

时间:2013-12-20 17:31:11

标签: signalr

我有一个MVC4应用程序设置来测试SignalR推送通知,但它无法正常工作。 (我已经在MVC官方网站上测试了聊天应用程序并且它的工作正常,问题是当我从控制器推送消息时)。请有人帮我解决这个问题。

(1)我有启动cs如下,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Owin;
using Owin;

namespace MvcApplication3
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }

}

(2)Hub类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace MvcApplication3
{
    [HubName("notificationHub")]
    public class NotificationHub : Hub
    {

    }
}

(3)我在控制器上做的是,

public ActionResult Index()
{
    SendMessage("This should be displayed on client !!");
    return View();
}

private void SendMessage(string message)
{
    var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
    context.Clients.All.viewMessage(message);
}

(4)最后在Index视图中,

<style type="text/css">
    #span-display
    {
        color: red;
        font-size: 16px;
    }
</style>

<span id="span-display"></span>

@section scripts
{
    <script src="~/Scripts/jquery.signalR-2.0.1.min.js"></script>
    <script src="~/signalr/hubs"></script>

    <script type="text/javascript">
        $(function () {

            var notificationhub = $.connection.notificationHub;

            notificationhub.client.viewMessage = function (message) {

                $('#span-display').html(message);
            };

            $.connection.hub.start();

        });

    </script>
}

请帮助我们,我在截止日期前无法解决这个问题。如果这是一件简单的事情,请原谅我这个技术的新手。

提前谢谢: - )

1 个答案:

答案 0 :(得分:0)

我测试的代码几乎相同,并且它有效,我发现的唯一不同之处在于启动类,我也有:

[assembly: OwinStartup(typeof(SignalR_Example.Hubs.Startup))]
namespace SignalR_Example.Hubs
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

尝试使用第一行将值更改为您的值,其他重要的是JS,您是否检查过浏览器控制台?,是否有任何错误或类似的错误?