代码之家  ›  专栏  ›  技术社区  ›  Walden Leverich

ASP,服务器。CreateObject、MTS和C#对象池-重用问题?

  •  2
  • Walden Leverich  · 技术社区  · 17 年前

    我正在调试一个“偶然”的问题。我们有一个经典的ASP应用程序,需要发送电子邮件。无论出于何种原因,它都使用通过COM公开的C#对象来执行此发送;c#对象是围绕MailMessage和SMTPClient的简单包装器,使用SendAsync进行发送。在ASP端,对象是服务器。CreateObject()在发送每封邮件之前都会被删除,但邮件消息是以紧密循环的方式发送的。这 应该 为每条消息生成一个新的COM对象(因此也是一个新的c#对象)。但是,我们看到消息被丢弃,消息被发送到多个收件人,就好像对象被重用一样。

    在对MTS进行了一些研究之后(从没想过我会再去那里!)我记得/发现了那个服务器。CreateObject经过MTS,MTS将汇集COM对象以“帮助”我。我们已经更改了ASP代码,改为创建一个新的ActiveXObject,我认为它没有经过MTS,但我们也遇到了同样的问题。

    我假设ServicedComponent接口在中是正确的。net是最新的。net/com+版本的ObjectControl接口?如果我从ServicedComponent继承,那么对象是否会被设置为允许池=false?我宁愿在ASP中进行更改,但如果不可能,那么我也可以进行c#更改。

    思想?

    编辑:页面语言也是JScript,而不是“普通”VBScript。

    1 回复  |  直到 17 年前
        1
  •  1
  •   AnthonyWJones    17 年前

    服务器在这种情况下,CreateObject和新的ActiveXObject都将指向同一个对象。

    COM+不会池化未明确指示可以池化的对象。

    我倾向于做的是调查使用a的原因。NET组件,为什么是CDO。消息未被使用?SendAsync的使用尤其令人困惑。如果你只是发送电子邮件,那么SendAsync对你的帮助很小。

    我想不出一个避免使用CDO的好理由。在这种情况下,这可能是因为我们忽略了其他因素。

    推荐文章