0

IIS7 で Web サイトを実行しています。私の問題をよりよく説明するために、簡単なシナリオで説明します。index.phpreport.phpの 2 つの Web ページがあり、それぞれの内容が次のようになっているとします。

index.php

<?php echo "Hello World"; ?>

report.php

<?php sleep(60); //simulate a long running script like generating reports. ?>

index.phpは、訪問者がアクセスする e コマース システムのホームページであり、report.phpは、管理者が好きなときにレポートを表示するページです (ほとんどの場合、日中) 問題は、生成に数分かかるレポートを表示すると、サーバー全体が応答しなくなることです。index.phpを表示している訪問者は、レポートの生成が完了するまで応答を受け取りません。これは、ASP.NET にも適用されます。これに対する回避策はありますか?

4

1 に答える 1

0

これは、iis6 および 7 のスレッド化について説明しています。本質的に、新しいスレッドは、新しい着信要求ごとに処理します。したがって、個々のページを一定時間スリープさせても、他のページの処理には影響しません。2ページを使用してこれをテストしました。

page.aspx:

<%@ Page Language="C#" %>
<%=DateTime.Now.ToString() %>

インデックス.aspx:

<%@ Page Language="C#" %>
<%=DateTime.Now.ToString() %>
<% System.Threading.Thread.Sleep(10000); %>

index.aspx を呼び出すと、page.aspx を繰り返し呼び出すことができ、index.aspx への最初のリクエストがスリープしている間に、リクエストごとに現在の時刻が返されます。

サーバーでリクエストがブロックされる原因が何かある場合、それはサイト全体で使用されている共有リソースである可能性があります。上記の例では、index.aspx がファイルや DB などのリソースへの排他的アクセスを要求した場合、page.aspx への複数の要求は、index.aspx が終了してリソースを解放するまで待機する必要があります。

于 2013-06-21T10:12:10.717 に答える