Architecture DCOM单例替换

Architecture DCOM单例替换,architecture,asp-classic,singleton,communication,dcom,Architecture,Asp Classic,Singleton,Communication,Dcom,我们有一个旧的遗留web应用程序。该体系结构包括: (经典)服务于客户端浏览器的ASP页面;VB脚本,上千个 ASP(IIS)调用的进程外DCOM服务器;MFC,singleton,exe 数据库;一个或多个架构 调用DCOM服务器的补充ASP.NET应用程序 服务器的角色包括: 处理用户登录、注销和授权 保存用户会话信息的步骤 生成用户界面 保护/授权用户操作的步骤 在数据库中检索和存储数据 由于服务器的角色众多,ASP(IIS)和DCOM服务器之间的调用接口非常广泛,在众多页面中大量使用

我们有一个旧的遗留web应用程序。该体系结构包括:

  • (经典)服务于客户端浏览器的ASP页面;VB脚本,上千个
  • ASP(IIS)调用的进程外DCOM服务器;MFC,singleton,exe
  • 数据库;一个或多个架构
  • 调用DCOM服务器的补充ASP.NET应用程序
  • 服务器的角色包括:

    • 处理用户登录、注销和授权
    • 保存用户会话信息的步骤
    • 生成用户界面
    • 保护/授权用户操作的步骤
    • 在数据库中检索和存储数据
    由于服务器的角色众多,ASP(IIS)和DCOM服务器之间的调用接口非常广泛,在众多页面中大量使用。
    主要的问题在于IIS调用DCOM服务器,并且随着Windows服务器的更新而变得更大。从Windows server 2008开始,这种组合几乎不可维护。有了UAC,即使是进程外的单个DCOM服务器也无法工作(不同的进程在不同的安全上下文中启动)

    我希望保持服务器的MFC/C++代码和它作为一个单例运行(尽管有所有的缺点)。这些ASP页面是应用程序中最具动态性且经常变化的部分,我希望它们保持不变。我可能会牺牲补充ASP.NET应用程序

    <>强>什么是服务器单进程的DCOM接口的最佳替换?< /强>我认为性能和将来的维护是最重要的。
    (我可以把一个完全相同的.Net接口看作是COM的替代品,但我主要关心的是在我的第一次迭代中将其保持为一个进程单例。)

    这个问题对于这样的系统来说有点开放性。。。但是我很久以前使用了下面的技术,做了一个Java到COM的桥接。嗯

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

    所以把你的单身分为两部分

    首先,将singleton作为服务运行(或在COM+中运行)。向该进程添加一个小垫片(在自己的线程上运行),用于接收HTTP请求并将其转换为进程内COM调用。因为您已经在进程外工作,所以封送accross线程不应该是一个问题。请看一下HTTP部分。它是一个单一的C文件,可以让您在短时间内运行概念验证

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


    +确保您的垫片不在公共界面上侦听

    是的,应用程序的当前状态运行良好。但在新的操作系统上支持它是个问题。我将重复ixe013的体系结构,但建议使用基于Microsoft的解决方案:“升级”DCOM服务器到WCF托管组件,这使您可以选择COM适配器和服务器之间的通信协议。是否无法为服务器组件指定正确的标识?对于较新的操作系统,它只是用于运行IIS的不同安全帐户-Once将IIS安全性与组件的安全性进行匹配它应该像以前一样工作,不是吗?我将尝试在回答belowIn Win2008+中回答您的直接问题。它基于安全帐户和完整性级别。这就是为什么有时会启动第二个过程。这取决于“DCOM SCM是否认为现有DCOM服务器实例适用于特定客户端”:。它们不鼓励使用单实例DCOM服务器,这支持了我的问题的相关性。