1

ユーザーからデータを収集してサードパーティのWebサービスに送信するASP.NETWebサイトを構築しています。Webサービスはやや信頼性が低く、このためバックアップサービスがあります。

プライマリサービスへの呼び出しが失敗した場合(タイムアウトまたはその他のエラー)、静的クラスのビットを反転する必要があります。これにより、システムがトリップしてセカンダリサービスを使用します。

この時点で、プライマリサービス(ダミーデータを使用)のポーリングを開始して、バックアップされているかどうかを確認する必要があります(その時点で、OKコードを受け取ります)。この時点で、Webサイトがプライマリサービスの使用を再開できるように、ビットを元に戻す必要があります。

これを読んだことがあります。WindowsサービスまたはASP.NETバックグラウンドスレッドを使用する必要がありますか?コードをWindowsサービスに分離することが、ポーリングを実行するための最もクリーンな方法だと思いますが、Webアプリケーションとどのように通信するのでしょうか。

私が考えていたのは、WindowsサービスがWebアプリとの通信に使用できるWebサービスを公開することでしたが、これは面倒でやり過ぎのようです。

同様のタスクを実行するためのあなたの考えと経験に感謝します。

ありがとう

4

1 に答える 1

1

間違いなく、Windowsサービスがその方法だと思います。

サービスとWebサイト間の通信に関しては、ベストアンサーはソリューションのサイズと規模によって異なります。信頼性が必要なものを構築している場合は、ASP.NETサイトとWindowsサービスの間に何らかのキューを実装することをお勧めします。ここでも、予算と能力に応じて、BizTalk、MSMQ、SQL Serverキュー(SSIS)などの多くのオプションがあります。あるいは、もっと小さなスケールのものを探しているなら、それをどこかのデータベーステーブルに貼り付けることをお勧めします。

ファイルロックとマルチスレッドの問題が発生するため、ファイルシステムでファイルを使用することは避けます。また、何らかの理由でサービスが失敗した場合にメモリ内キューを失うリスクがあるため、サービスと直接通信することは避けます。

追加するために編集:

ここで信頼性が問題にならない場合は、WebサイトとWindowsサービス間の通信にWPF名前付きパイプでホストされるサービスを使用できます。これにより、従来のWebサービスに通常含まれるオーバーヘッドの多くが回避され、驚くほど高速になります。唯一の欠点は、WPFサービスをセルフホスティングするのは難しいことであり、サービスを維持するのが難しい場合があります。

于 2009-06-23T10:35:09.557 に答える