0

Web アプリケーションを Web ファームに変換するために調査中です。そこで、「最大ワーカー プロセス = 3」を変換することで、Web ガーデンから始めました。以下は、私の問題の簡略版です。

以下は私の静的オブジェクトクラスです。

public static class MyStaticObject
{
public static string MyProperty {get;set;}
}     

次に、ページの読み込み時に、次のように静的オブジェクトを初期化しました-

MyStaticObject.MyProperty = "My Static Property";

次に、asp.net ajax [WebMethod] を使用して、Web ページに ajax メソッドを作成します。

[WebMethod()]
public static string getStaticProperty()
{
  return MyStaticObject.MyProperty;
}

// 次に、Javascript を使用してこの Ajax メソッドを呼び出し、戻り値をテキスト ボックスに設定します。

このテストは期待どおりに機能していません。以下は、私の仮定とテストからの間違った結果です。

  1. 仮想ディレクトリを Web ガーデンに設定すると、仮想ディレクトリへの各リクエストは Web ガーデンの異なるプロセスによって処理されるので、サーバーへの次のいくつかのリクエストは null を返すはずです。処理する。しかし、ajax ボタンを連続して 20 回 (20 回のリクエストを意味する) クリックしても、静的オブジェクトは値を返します。

  2. IIS を再起動すると、すべての静的オブジェクトが強制終了されるはずです。

  3. 静的オブジェクトは、Web ガーデン/Web ファームでは共有されません。

IIS、静的オブジェクト、Web ガーデンの動作には驚かされます。

私は間違っていると仮定していますか、それとも私のテスト方法が間違っていますか。

ありがとう。

4

1 に答える 1

3

AppPools/Webガーデンで静的オブジェクトを管理する方法についてのあなたの仮定は正しいです。

ただし、Web要求の配布方法に関するあなたの仮定はそうではありません。HTTP要求は、新しい要求が到着したときではなく、新しいTCP接続が確立されたときにのみ、http.sysドライバーによってIISワーカープロセスにラウンドロビンされます。キープアライブはデフォルトで有効になっているため、連続して20の要求を行ったとしても、それらはすべて同じIISワーカープロセスによって処理された可能性があります。

IISマネージャーの[共通ヘッダーの設定]の下にある[HTTP応答ヘッダー]セクションから、テスト目的でIISにキープアライブを無効にすることができます。これにより、ブラウザはリクエストごとに新しい接続を開くはずです。

キープアライブを有効にしてテストするには、IIS 6リソースキットで利用可能なWeb容量分析ツール(WCAT)を使用して、Webガーデン内の両方のIISプロセスにアクセスするマルチスレッド負荷を生成できます。

于 2011-12-04T03:10:37.943 に答える