アーキテクチャを一般化し、インターフェイス駆動型にすることで、基礎となるトランスポートを交換できるようにします。
public interface INotificationService
{
event EventHandler NewNotification;
void SendEvent(string eventDetails);
}
非常に単純な例として。
実装には、いくつか(数百)のオプションがあります。イベントがデータベースに入れられているとあなたは言いました。一意の増分整数キーがあることを確認すると、各クライアントからデータベースをポーリングして、最後のイベント ID のイベントを見つけることができます。それを 10 秒ごとに行うか、できるだけ早く行います。これは非常に小さなパフォーマンス ヒットであり、それほど効率的ではありませんが、非常にシンプルで信頼性が高く、データベースにイベントを配置しているため、既にデータベースにアクセスできます。
または、Web サービスまたは WCF サービスを作成することもできます。通常、Web サービスはポーリングする必要がありますが、WCF サービスは二重通信で構成できるため、ポーリングする必要はありません。
その他のオプションには、MSMQ、または他のメッセージング ソリューションの 1 つ、RabbitMQ、Tibco などがあります。それはすべて詳細に依存します。
ここで重要なことは、最初のインターフェイスとそれに対するコードがあることを確認することです。そうすれば、データベースのポーリングが遅くなりすぎて Tibco にアップグレードする必要がある場合、非常にローカライズされた単純な変更になります。