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