4

SignalRをSqlCacheDependency(またはSqlDependency)と組み合わせて使用​​して、データベースの更新をブラウザーに直接プッシュすることは可能ですか?たぶん、この機能を実現する他の方法がありますか?

私が今働くことができる唯一のことは、データを更新する非同期呼び出しからaddMessageを呼び出さなければならないことを含みますが、それは実際には異なるソースからの更新をカバーしていません(たとえば、テーブルを更新するバックグラウンドサービス)。

4

2 に答える 2

5

SQLDependencyでOnChangeイベントを使用できるはずです。イベントハンドラーでは、SignalRを介してメッセージを送信できます。外部からハブを呼び出すため、ここのドキュメントの下部に示されている手法を使用する必要があります。

using SignalR.Infrastructure;

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>(); 
...
于 2012-03-27T06:00:10.110 に答える
1

わかりました、私はそれを理解しました、または少なくとも、それを行うための1つの方法。

私が最初に理解できなかったのは、MVCコントローラー内からそのコードを使用する必要があるということです。一度実行すると、 WebRequestクラスを使用して、他の場所やアプリケーションからもそのコントローラーを呼び出すことができます。

@Hightechrider完全を期すために、そのコードを機能させるには、さらに2つの参照を含める必要があります。このデモコードはPersistentConnectionを使用して実行されますが、ハブの原則はもちろん同じです。

編集:現在、asp.net mvc内のスレッドを使用してsqldependencyを管理しています。これは、より統合されたソリューションのように感じます。asp.netでバックグラウンド処理を「正しい方法」で実装する方法については、この投稿を確認して くださいhttp://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in- asp-net.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;    

using SignalR.Infrastructure;
using SignalR.Hosting.AspNet;
using SignalR;

namespace SignalRDemo.Controllers
{
    public class DemoController : Controller
    {
        public void sendMessage( string message)
        {
            IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
            IConnection connection = connectionManager.GetConnection<MyConnection>();

            connection.Broadcast(message);
        }
    }
}
于 2012-03-27T17:21:07.400 に答える