DCOM单例替换

时间:2013-03-23 00:08:06

标签: architecture asp-classic singleton communication dcom

我们有一个旧的遗留Web应用程序。该架构包括:

  1. (经典)为客户浏览器提供服务的ASP页面; VB脚本,数以千计
  2. ASP(IIS)调用的进程外DCOM服务器; MFC,singleton,exe
  3. 数据库;一个或多个模式
  4. 调用DCOM服务器的补充ASP.NET应用程序
  5. 服务器的角色是:

    • 处理用户登录,注销和许可
    • 保留用户会话信息
    • 生成UI
    • 保护/授权用户操作
    • 检索并存储数据库中的数据

    由于服务器的这些角色很多,ASP(IIS)和DCOM服务器之间的调用接口相当广泛,并且在这些页面中大量使用。
    主要的问题在于IIS调用DCOM服务器,并且对于较新的Windows服务器而言会变得更大。从Windows Server 2008开始,这种组合几乎无法维护。使用UAC即使单独的进程外DCOM服务器也无法工作(不同的进程在不同的安全上下文中启动)。

    我希望保留服务器的MFC / C ++代码,并将其作为单例运行(尽管有各种缺点)。那些很多ASP页面是应用程序中最具活力和不断变化的部分,我希望保持它们不变。我可能会牺牲补充的ASP.NET应用程序。

    什么是服务器的单例进程外DCOM接口的最佳替代品?我认为性能和未来维护是最重要的。

    (我可以看到一个相同的.Net接口作为COM替换,但我主要担心的是在我的第一次迭代中保持单进程单例。)

1 个答案:

答案 0 :(得分:2)

这个问题对于SO来说有点开放......但是我不久前使用了以下技术,做了一个Java-to-COM桥接器。 HTH ...

我理解代码有效,因为您愿意保留大部分代码。缩放单例模式时遇到问题。

所以将你的单身分成两部分。

首先,将您的单件作为服务运行(或在COM +中)。向该进程添加一个小垫片(在其自己的线程上运行),该垫片接收HTTP请求并将它们转换为进程内COM调用。由于您已经在进程外工作,因此跨线程编组应该不是问题。查看HTTP部分的Mongoose。它是一个单独的C文件,可以立即为您提供概念验证。

其次,编写(从头开始)一个普通的非单例进程COM对象,它实现与服务器相同的接口。该存根只会将它接收到的COM调用转换为调用HTTP帖子到真正的单例。

+确保您的垫片不会在公共界面上收听!