1

我有一个 MVC 应用程序,我正在显示数据库中的记录,并且我能够创建新记录。当来自 Nservicebus 的 IEvent 处理程序完成时,我正在使用 SignalR 通知客户端。

索引.cshtml

<script src="signalr/hubs" type="text/javascript"></script>
<script>
    var myHub;

    $(function () {
        myHub = $.connection.userAccountHub;

        //add handler to handle the nofication
        myHub.testMsg = function () {
            alert("I would really like for this to work");
        };

        $.connection.hub.start();
    }); 
</script>

用户控制器.cs

public class UserController : Controller
    {
        private readonly IBus _bus;    


public ActionResult Index()
        {
            return View(getalldata());
        }


[HttpPost]
        public ActionResult Create(CreateUserAccountModel user)
        {
            if (ModelState.IsValid)
            {
                _bus.Send(new CreateUserAccountCommand
                {
                    FirstName = user.FirstName,
                    LastName = user.LastName,
                    NetworkLogin = user.NetworkLogin
                });

                return RedirectToAction("Index");
            }

            return View(user);
        }

用户帐户中心

public class UserAccountHub : Hub
    {

    }

UserAccountCreatedNotifyEventHandler.cs

public class UserAccountCreatedNotifyEventHandler : IHandleMessages<UserAccountCreatedNotifyEvent>
    {
        public void Handle(UserAccountCreatedNotifyEvent message)
        {
            IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
            dynamic clients = connectionManager.GetClients<UserAccountHub>();

            clients.testMsg();
        }
    }

基本上我会去 Index 操作,它只显示我的所有记录并有一个创建按钮。我单击创建按钮@Html.ActionLink("Create", "Create", null, null),它调用了该public ActionResult Create(CreateUserAccountModel user)方法。启动总线,然后重定向到索引操作。服务总线做它的事情并且UserAccountCreatedNotifyEventHandler Handle方法被适当地触发。

这是我开始看到一些问题的地方。我调用适当的信号器方法来获取客户端,以便我可以广播消息.testMsg(),但是客户端没有收到消息。

所以简而言之,我的信号员clients.testMsg呼叫没有按预期运行。据我所知,我正在关注我在网上找到的代码示例,甚至是我拥有的其他测试项目。我假设我在做一些愚蠢的事情,但不能针对它。

4

2 回答 2

2

在您的处理程序中,您需要创建一个到集线器的代理并调用代理上的方法。好吧,注入代理,因为每次创建它都会很昂贵!

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

于 2012-04-16T20:57:44.277 回答
0

尝试

myHub.client.testMsg = function(){....}

不是

myHub.testMsg = function(){....}
于 2013-03-02T11:28:23.020 回答