我正在尝试调试“偶尔”问题。我们有一个需要发送电子邮件的经典ASP应用程序。无论出于何种原因,它都使用通过COM公开的C#对象来执行此操作; c#对象是MailMessage和SMTPClient的简单包装器,使用SendAsync进行发送。在ASP端,在发送每个邮件之前,对象是Server.CreateObject(),但是邮件消息是在紧密循环中发送的。这个应该为每个消息产生一个新的COM对象(因此也就是一个新的c#对象)。但是,我们看到邮件被丢弃,邮件被发送到多个收件人,就像对象被重用一样。
经过对MTS的一些研究(从未想过我会再去那里!)我记得/发现Server.CreateObject经过MTS而MTS将汇集COM对象以“帮助”我。我们已经改变了ASP代码来代替一个新的ActiveXObject,我认为它没有通过MTS,但我们遇到了同样的问题。
假设.net中的ServicedComponent接口是ObjectControl接口的.net / com +版本,我是否正确?如果我从ServicedComponent继承,那么对象会被设置为允许pooling = false吗?我宁愿在ASP中进行更改,但如果这不可能,那么我也可以改变c#。
思想?
编辑:页面语言也是JScript,而不是“普通”VBScript。
答案 0 :(得分:1)
Server.CreateObject和新的ActiveXObject将完全相同。
COM +不会合并一个没有明确表示可以合并的对象。
我想要做的是调查在这里使用.NET组件的原因是什么,为什么没有使用CDO.Message?使用SendAsync尤其令人困惑。如果你有一个紧凑的循环只是发送电子邮件,那么SendAsync对你来说很少。
我不能认为在这种情况下避免使用CDO.Message是一个很好的理由,但当然可能是因为我们错过了其他因素。