そのため、次のコンポーネント/機能があるサンプルを作成しようとしています:
- Windows サービスから自己ホストされる hangfire サーバー OWIN
- ジョブが完了したときの SignalR 通知
タスクをキューに入れて実行することはできますが、タスク/ジョブがいつ完了したかをクライアントに通知する方法を整理するのに苦労しています(現在、すべてうまく機能するまで)。
私の現在の問題は、SignalR ハブを「コア」ライブラリSampleCoreに配置したいのですが、webapp SampleWebを起動するときに「登録」する方法がわかりません。私がこれを回避した 1 つの方法は、実際のハブを継承し、単純な処理 (1 つのクライアントからすべてのクライアントにメッセージを送信する) に適したハブ クラスNotificationHubProxyを作成することです。
NotifyTaskCompleteでは、ハブ コンテキストを取得して、次のようにメッセージを送信できると思います。
private void NotifyTaskComplete(int taskId)
{
try
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
if (hubContext != null)
{
hubContext.Clients.All.sendMessage(string.Format("Task {0} completed.", taskId));
}
}
catch (Exception ex)
{
}
}
しかし、NotificationHubProxy が使用されているクラスである場合、SampleWeb ライブラリの一部であり、SampleCore から参照すると循環参照が発生するため、これを行うことはできません。
主な問題は外部アセンブリのハブであることはわかっていますが、SignalR または MVC5 を使用している、またはこの特定の方法でセットアップされている関連サンプルを見つけることはできません。
何か案は?