質問

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

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

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

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

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

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

ありがとう

役に立ちましたか?

解決

Windowsサービスは間違いなく進むべき方法だと思います。

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

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

編集して追加:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top