我们有一个旧的遗留Web应用程序。该架构包括:
服务器的角色是:
由于服务器的这些角色很多,ASP(IIS)和DCOM服务器之间的调用接口相当广泛,并且在这些页面中大量使用。
主要的问题在于IIS调用DCOM服务器,并且对于较新的Windows服务器而言会变得更大。从Windows Server 2008开始,这种组合几乎无法维护。使用UAC即使单独的进程外DCOM服务器也无法工作(不同的进程在不同的安全上下文中启动)。
我希望保留服务器的MFC / C ++代码,并将其作为单例运行(尽管有各种缺点)。那些很多ASP页面是应用程序中最具活力和不断变化的部分,我希望保持它们不变。我可能会牺牲补充的ASP.NET应用程序。
什么是服务器的单例进程外DCOM接口的最佳替代品?我认为性能和未来维护是最重要的。
(我可以看到一个相同的.Net接口作为COM替换,但我主要担心的是在我的第一次迭代中保持单进程单例。)
答案 0 :(得分:2)
这个问题对于SO来说有点开放......但是我不久前使用了以下技术,做了一个Java-to-COM桥接器。 HTH ...
我理解代码有效,因为您愿意保留大部分代码。缩放单例模式时遇到问题。
所以将你的单身分成两部分。
首先,将您的单件作为服务运行(或在COM +中)。向该进程添加一个小垫片(在其自己的线程上运行),该垫片接收HTTP请求并将它们转换为进程内COM调用。由于您已经在进程外工作,因此跨线程编组应该不是问题。查看HTTP部分的Mongoose。它是一个单独的C文件,可以立即为您提供概念验证。
其次,编写(从头开始)一个普通的非单例进程COM对象,它实现与服务器相同的接口。该存根只会将它接收到的COM调用转换为调用HTTP帖子到真正的单例。
+确保您的垫片不会在公共界面上收听!