0

RavenDB を使用していますが、特定のドキュメントがデータベースに追加されると、DAL が通知を受け取ります。全体の流れは次のようになります。

WPF -> WCF (SignalR もホスト) -> BLL -> DAL -> RavenDB

ドキュメントが追加されると、次のようになります。

  1. RavenDB ドキュメントが追加されました
  2. DAL が変更通知を受け取り、イベントを発生させる
  3. WCF はそのイベントをサブスクライブし、すべての SignalR クライアントにメッセージを送信します
  4. すべての WPF クライアントがこの通知を受け取り、UI を更新してこの新しいドキュメントを表示します

私の WCF サービスは DAL に直接依存しているため、これは間違っているようです。

もう 1 つのオプションは、DAL が SignalR クライアントに通知するようにすることですが、DAL はそれを気にする必要がないため、これは間違っているように見える可能性があります。それはすべきですか?

接続されているすべてのクライアントに通知するために実際に SignalR を使用するのは、アプリケーション全体のどの部分である必要がありますか?

明確にするために、私が苦労している部分は、下の赤い線 (#2) です。WCF サービスを DAL に依存させるのに苦労しています。

ここに画像の説明を入力

4

3 に答える 3

1

SignalR がクライアントを更新できるようにする分離された方法を作成しました。私のライブラリは nuget Install using にあります。

Install-Package SignalR.EventAggregatorProxy 

ウィキ: https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

フレームワークが機能するには、サービス バスまたは「EventAggregator」が必要です。特定のサービス バスまたはイベント アグリゲーター用にハードコーディングしていないため、プロキシを作成する必要があります。Caliburn micro には、プロセス イベント アグリゲーターを使用してインストールできる軽量のプロセス イベント アグリゲーターがあります。

Install-Package Caliburn.Micro.EventAggregator 

次に、私のライブラリと CM.EA の間にプロキシを作成する必要があります。その後、データ アクセス レイヤーで発行されたメッセージは自動的にクライアントに転送されます。彼らは次のようなイベントを聞くことができます

signalR.eventAggregator.subscribe(MyApp.Events.TestEvent, this.onTestEvent, this);

次のような一般的なイベントを使用することもできます

signalR.eventAggregator.subscribe(MyApp.Events.MyGenericEvent.of("System.String"), this.onMyGenericEvent, this);

編集:クライアントにJSではなくWPFを使用していることに気付きました。申し訳ありません。現在、lib は Web アプリを対象としています。もちろん、C# クライアントでも機能するはずです。C# クライアントのサポートはすぐにロードマップに追加されます。

更新: .NET クライアントが利用できるようになりました。サーバーはまだ IIS でホストされているだけです。

Install-Package SignalR.EventAggregatorProxy.Client.DotNet

ウィキ: https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/.NET-Client

.NET クラスは、次のようなイベントをリッスンできます。

public class MyViewModel : IHandle<MyEvent>
{
   public MyViewModel(IEventAggregator eventAggregator) 
   {
      eventAggregator.Subscribe(this);
   }
   public void Handle(MyEvent message)
   {
      //Act on MyEvent
   }
}

詳細についてはウィキを参照してください

于 2013-05-28T07:40:52.987 に答える
0

あなたのワークフローは私には問題ないように思えますが、SignalR が通知を受け取るまでの時間に依存すると思います。私だったら、できるだけ早く WCF からクライアントを更新します。すべてのクライアントにメッセージを送信する責任を DAL レイヤーに持たせることは、適切な場所ではありません。

于 2013-05-26T22:18:46.697 に答える