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で見つけたコード例、および私が持っている他のテストプロジェクトをフォローしています。私は愚かなことをしていると思いますが、それをターゲットにすることはできません。