2

私はインターフェースのこのisReusableプロパティに頭を悩ませようとしていますが、あなたの助けが必要です。IHttpHandler

使用しているCMSにドキュメントが保存されるたびにイベントを発生させます。そのイベントで、そのドキュメントをサブスクライブしているユーザーに電子メールを送信するHttpHandlerへのアクションを実行したいと思います。約75通のメールがあります。私のメール配信サービス(消印)を使用すると、メール1通あたり約1〜5秒かかるため、合計で約2〜5分かかります。

ハンドラーは1つのパラメーター(ドキュメントID)のみを受け取り、誰に電子メールを送信するかを判断し、もちろんそれらを送信します。

このシナリオでは、isReusableプロパティをtrueに設定するのが賢明ですか?なぜ?

とても有難い。

4

2 に答える 2

3

IHttpHandlerインターフェイスを使用して独自のHttpHandlerを実装するだけの場合は、インターフェイスの関数とプロパティを実装する必要があります。関数ProcessRequest()は、コードに従って応答を返す独自のカスタムリクエストハンドラーを実装するために使用されます。

IsReusableは、ハンドラーオブジェクトをプールするためのものです。したがって、ハンドラーが要求固有の状態を保持していない場合は、trueを返して、プールするように要求できます。これは通常、ハンドラーが非常にコストのかかる初期化を行う場合に行われます。それ以外の場合は、trueまたはfalseを返すかどうかはおそらく問題ではありません(.NETでは単純なオブジェクト割り当てはかなり安価であるため)。ところで、ページがプールされることはありません。

于 2011-04-19T04:06:45.973 に答える
1

簡単なテストは、ハンドラーがスレッドセーフである場合にIsReusableがtrueを返すことです。したがって、Adamが指摘したように、ハンドラーはステートレスである必要があります。

電子メールを送信するための長期にわたるプロセスについてのポイントです。Webサーバー上のスレッドをかみ砕くことになります---これは、サイトの応答性を維持するために実行したくない場合があります。

可能であれば、サービスバスを検討し、そうすることで作業を別のプロセスに渡すことができます。例えば:

bus.Send(new SendEMailCommand { id = theId });

これにより、電子メールリクエストがキューに入れられ、この処理に許可する同時スレッドの数を制御できるようになります---独自のAppDomainでIISの外部で実行されているスレッド:)

ちょっとした考え。

于 2011-04-19T05:58:49.683 に答える