2

我正在尝试调试“偶尔”问题。我们有一个需要发送电子邮件的经典 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。

4

1 回答 1

1

在这种情况下,Server.CreateObject 和 new ActiveXObject 都将指向同一事物。

COM+ 不会将未明确表明它可以被池化的对象池化。

我倾向于做的是调查这里使用 .NET 组件的原因是什么,为什么不使用 CDO.Message?SendAsync 的使用尤其令人困惑。如果你有一个紧密的循环只是发送电子邮件,那么 SendAsync 对你的作用很小。

我想不出在这种情况下避免使用 CDO.Message 的充分理由,但当然这可能是因为我们缺少其他因素。

于 2009-05-15T07:45:24.263 回答