0

背景: ASP.NET MVC Web アプリケーションがあります。ユーザーに表示される HTML コンテンツを定期的にキャプチャし、どこかに保存して、時間の経過とともにコンテンツがどのように進化したかを追跡できるようにしたいと考えています。たとえば、1 年前に存在していたホームページの HTML をプルできるようにしたいと考えています。これは、URL のリストを定期的に実行するある種のクローラーを使用して実行できます。

私の質問: Web サイト自体HttpWebRequestが独自の URL に対して s を発行するのは良い考えですか? Timer1 時間に 1 つの URL をダウンロードして保存する Web アプリケーションを内部で起動できます。

別のアーキテクチャは、Windows サービスのような外部アプリケーションにクローラーを配置することです。ただし、これははるかに複雑なアーキテクチャになります。この質問では、より単純なアーキテクチャを回避しようとしているため、このオプションを検討したくありません。

ASP.NET アプリケーションが を使用して独自の URL を要求すると、何が問題になる可能性がありますHttpWebRequestか?

擬似コード:

StartTimer(TimeSpan.FromHours(1), () => {
 var url = "http://localhost/SomePageInTheCurrentW3wpProcess.aspx";
 var data = new WebClient().DownloadString(url); //calling current application
 Persist(data);
});

どんな悪いことが起こるかわかりません。再入可能性の問題をスレッド化することを考えています。分散デッドロックなどには注意が必要です。

4

1 に答える 1

1

Webサイト自体に独自のURLにHttpWebRequestsを発行させるのは良い考えですか?

いいえ、まったくありません。ランニングperiodic background tasks in an ASP.NET applicationは危険な仕事です。あなたがそのルートに行くと、あなたのコントロールできない非常に多くのことがうまくいかない可能性があります。Phil Haackは、彼のブログ投稿でそれらのほとんどをカバーしています。その方向に進む前にアドバイスすることをお勧めします。

ちなみに、マネージドWindowsサービスのアーキテクチャが複雑すぎる場合は、を使用して定期的に実行するようにスケジュールされた単純なコンソールアプリケーションで十分に対応Windows Schedulerでき、ASP.NETを使用する場合よりもはるかにうまく機能します。設計されていません(定期的なバックグラウンドタスクの実行など)。

于 2013-01-27T15:49:16.103 に答える