背景: ASP.NET MVC Web アプリケーションがあります。ユーザーに表示される HTML コンテンツを定期的にキャプチャし、どこかに保存して、時間の経過とともにコンテンツがどのように進化したかを追跡できるようにしたいと考えています。たとえば、1 年前に存在していたホームページの HTML をプルできるようにしたいと考えています。これは、URL のリストを定期的に実行するある種のクローラーを使用して実行できます。
私の質問: Web サイト自体HttpWebRequest
が独自の URL に対して s を発行するのは良い考えですか? Timer
1 時間に 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);
});
どんな悪いことが起こるかわかりません。再入可能性の問題をスレッド化することを考えています。分散デッドロックなどには注意が必要です。