1

特定のデータについてWebサービス(ASP.NET Web API)にクエリを実行し、結果を視覚化することになっているWebアプリケーションを開発しています。クエリされたデータは、クライアントアプリケーションの実行中に変更される可能性があります。これは、対応するデータベースコレクションにアイテムが追加されたり、コレクションから削除されたりするためです。クライアント自体または他のクライアントのいずれかが(Webサービスを介して)コレクションを変更できます。データベースサーバーであるRavenDBには、クライアント(Webサービス)に変更を通知する機能があります。

私が疑問に思っているのは、Webサービスでデータが変更されたときに、クライアントをどのように最新の状態に保つ必要があるかということです。具体的には、Webサービスのデータベースに変更が加えられ、クライアントのデータの表示が古くなった場合、クライアントは新しいクエリ結果を受け取る必要があります。たとえばSignalRを介してクライアントへの永続的な接続を維持し、データベースに変更が加えられるたびにクライアントに通知して、各クライアントがデータを再クエリできるようにすることをお勧めしますか?これらの変更通知は、頻繁になりすぎた場合に備えて調整する必要がありますか?

シナリオ例

データベースには次の項目が含まれています(JSON表記)。

[{"Id": "2", "User": "usera"}, {"Id": "1", "User": "usera"},
    {"Id": "3", "User": "userb"}, {"Id": "4", "User": "usera"}]

クライアントAは、User == "usera"で、最大2つのアイテムにページ分割され、IDでソートされたアイテムを要求します。サービスは次のセットを返します。

[{"Id": "1", "User": "usera"}, {"Id": "2", "User": "usera"}]

次に、クライアントBは、次の項目を削除するようにサービスに指示します。{"Id": "2", "User": "usera"}これにより、データベースは次のようになります。

[{"Id": "1", "User": "usera"}, {"Id": "3", "User": "userb"},
    {"Id": "4", "User": "usera"}]

ここで問題となるのは、WebサービスがクライアントAに、新しいデータを再クエリする必要があることをどのように通知するかということです。つまり、クライアントAは、ビューを更新して次の情報を含める必要があります。

[{"Id": "1", "User": "usera"}, {"Id": "4", "User": "usera"}]
4

1 に答える 1

2

あなたの言ったことは正しいように聞こえます。Web API と SignalR を並べてホストできます。Web API を使用してデータを取得し、SignalR を使用して、データが変更されるたびにクライアントに通知できます。データが変更されたことをクライアントに通知して再クエリできるようにするか、実際にクライアントに変更を送信して API の再クエリを回避できるようにすることができます。

クライアントが 15 秒または 30 秒ごとにサーバーをポーリングし、視覚化された結果を更新する別のモデルを使用することもできます。これには、永続的な接続を必要とせず、実装が容易であるという利点があります。ただし、変更がクライアントに反映されるまでに時間がかかり、結果セットが大きい場合や変更が頻繁に行われない場合は、より多くの帯域幅を消費することになります (実際に変更があるかどうかに関係なくポーリングが行われるため)。

于 2013-02-11T20:05:04.590 に答える