4

次のような質問への回答を探しています。

  • 特定のリクエストに対して、これら 3 つのプロパティは常に同じ値を返しますか?
  • それらのいずれかに副作用はありますか?
  • IIS が要求全体を受信するまでブロックするものはありますか?
  • それらのいずれかにより、アップロードされたファイルが完全にメモリにロードされますか?

サーバー上でのリクエストの処理に時間がかかりすぎる場合に Web アプリケーションからメールが送信されるようにしているため、このことを気にかけています。大きなリクエスト、つまりユーザーが 1 つ以上の大きなファイルをアップロードする場合に、このメールを送信することは避けたいと考えています。

4

1 に答える 1

2

MSDNによると:

ContentLength - クライアントから送信されるコンテンツの長さをバイト単位で指定します。
TotalBytes - 現在の入力ストリームのバイト数。
InputStream.Length - 入力ストリームのバイト長。

したがって、最後の 2 つは同じです。以下は、Reflector が ContentLength プロパティについて述べていることです。

public int ContentLength
{
    get
    {
        if ((this._contentLength == -1) && (this._wr != null))
        {
            string knownRequestHeader = this._wr.GetKnownRequestHeader(11);
            if (knownRequestHeader != null)
            {
                try
                {
                    this._contentLength = int.Parse(knownRequestHeader, CultureInfo.InvariantCulture);
                }
                catch
                {
                }
            }
            else if (this._wr.IsEntireEntityBodyIsPreloaded())
            {
                byte[] preloadedEntityBody = this._wr.GetPreloadedEntityBody();
                if (preloadedEntityBody != null)
                {
                    this._contentLength = preloadedEntityBody.Length;
                }
            }
        }
        if (this._contentLength < 0)
        {
            return 0;
        }
        return this._contentLength;
    }
}
于 2010-03-11T22:05:24.167 に答える