1

DBからのレコードを表示しているMVCアプリがあり、新しいレコードを作成する機能を提供しています。NservicebusからのIEventハンドラーが完了したときに、SignalRを使用してクライアントに通知しています。

Index.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>

UserController.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);
        }

UserAccountHub

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();
        }
    }

基本的に、すべてのレコードを表示し、作成ボタンがあるインデックスアクションに移動します。作成ボタンをクリック@Html.ActionLink("Create", "Create", null, null)すると、メソッドが呼び出されますpublic ActionResult Create(CreateUserAccountModel user)。バスを開始してから、インデックスアクションにリダイレクトします。サービスバスがその処理を実行し、UserAccountCreatedNotifyEventHandler Handleメソッドが適切にトリガーされます。

これは私がいくつかの問題を見始めるところです。適切なSignalerメソッドを呼び出してクライアントを取得し、メッセージをブロードキャストできるようにします.testMsg()が、クライアントはメッセージを受信して​​いません。

つまり、私のシグナリングclients.testMsgコールは期待どおりに機能していません。私の知る限り、私はWebで見つけたコード例、および私が持っている他のテストプロジェクトをフォローしています。私は愚かなことをしていると思いますが、それをターゲットにすることはできません。

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 に答える