2009-05-13 10 views
2

私は "時折"問題をデバッグしようとしています。メールを送信する必要がある従来のASPアプリケーションがあります。どのような理由であれ、COM経由で公開されたC#オブジェクトを使用して送信します。 c#オブジェクトは、SendAsyncを使用して送信を行うMailMessageとSMTPClientの周りの単純なラッパーです。 ASP側では、各メールが送信される前にオブジェクトがServer.CreateObject()になりますが、メールメッセージはタイトなループで送信されます。このになると、メッセージごとに新しいCOMオブジェクト(したがって新しいC#オブジェクト)が生成されます。しかし、メッセージがドロップされ、メッセージが複数の受信者に送信されるのは、オブジェクトが再利用されているかのようです。ASP、Server.CreateObject、MTSおよびC#オブジェクトのプール - 再利用の問題?

私は、Server.CreateObjectがMTSを通過し、MTSがCOMオブジェクトをプールして "助け"することを思い出した/発見しました。代わりに新しいActiveXObjectを実行するようにASPコードを変更しました。私はMTSを経由しないと思っていましたが、同じ問題があります。

.NETのServicedComponentインターフェイスがObjectControlインターフェイスの.net/com +バージョンであると仮定して正しいですか? ServicedComponentから継承すると、オブジェクトはpooling = falseを許可するように設定されますか?私はむしろASPの変更を行うだろうが、それが不可能ならば、私はC#の変更も行うことができる。

思考?

編集:ページ言語はJScriptでもあり、「通常の」VBScriptではありません。

答えて

1

この場合、Server.CreateObjectと新しいActiveXObjectはすべて同じことになります。

COM +は、プール可能であることを明示的に示さないオブジェクトをプールしません。

ここでは、なぜ.NETコンポーネントを使用する理由が何であるかを調べることです。なぜ、CDO.Messageは使用されていないのですか? SendAsyncの使用は特に混乱します。電子メールを送信するだけのタイトなループがある場合、SendAsyncはほとんど役に立ちません。

この場合、CDO.Messageを使用しないようにするのは正当な理由ではありませんが、私たちは他の要素がないためです。

+0

「なぜこの世はあなただ...」という質問は、「私たちはこのコードを継承したので」:-)残念なことに、クライアントは問題を「修正」してから、コード。ねえ...それは一握りだ。 .NETオブジェクトはServicedComponentから継承されないため、COM +はそれをプールしません。 CanPoolのデフォルトの実装はfalseですが、.netオブジェクトが継承しない場合、デフォルトはありません。 私たちはループでメールを送信していますが、各メールには独自のCOMオブジェクトがありますので、独自のSMTPClientを取得するため、非同期でも問題ありません。 COMオブジェクトが再利用されている場合を除きます。 –

関連する問題