Web应用程序到遗留代码互操作

时间:2009-12-03 15:59:48

标签: asp.net winforms com-interop legacy-code

我正在尝试将简单的WinForms应用程序迁移到ASP.Net Web应用程序。 WinForms应用程序基本上只是复杂普通C应用程序的表示层,并通过COM互操作与遗留代码交互。我在ASP.Net,javascript,jQuery方面经验丰富,在WinForms和interop方面有很多经验,所以我知道基础知识,我只需要做出设计决定。

应用程序现在的样子是:

  1. 有一堆遗留的C(甚至不是C ++)代码可以更改和重新编译,但移植不是一个选项。这是业务+数据层,称之为您想要的。我将其称为遗留代码

  2. 启动时,旧代码会实例化一个用于演示和用户交互的COM服务器。演示文稿数据被序列化并发送到此COM对象(“我正在向您发送一些输出。”),并且通过循环轮询实现用户交互(“您是否为我提供了一些输入?“)。不是最漂亮的解决方案,但很简单。

  3. COM对象实际上是一个暴露为COM的.NET 2.0 WinForms应用程序。此应用程序还通过.NET Remoting向其他.NET应用程序公开了一些功能,但这也不是那么重要。

  4. 尽管系统相当复杂,但WinForms应用程序仅用于交互,因此切换到Web非常容易。我不确定什么是最好的网络服务器方式< --->遗留代码交互。

    我想到的第一件事(因为我已经实现了.NET Remoting)是通过本地.NET Remoting将WinForms功能暴露给Web部件,使其在遗留代码和遗留代码之间起到某种代理的作用。网络应用。我实际上只需要通信部分,没有表格。在这种情况下,Web应用程序必须通过.NET Remoting(本地)访问此功能。

    让网络应用使用.NET Remoting在本地与另一个应用进行通信是明智的吗?此外,我可以将应用程序更改为Windows服务,但是我仍然可以通过COM将其功能公开给遗留代码吗?

    实现这一目标的更好方法是什么?请注意,如果需要,我还可以对遗留代码进行一些修改。

2 个答案:

答案 0 :(得分:2)

我认为,对您而言,一个重要方面是WinForms应用程序的单用户性和Web的多用户会话性。

10年前,我参与了几个Web项目,我们在MTS和后来的COM +中将业务逻辑作为COM对象(VB6)运行。让那些COM对象属于会话是一个禁忌,因为如果用户来了很多,你可能会在未使用但正在生活的COM对象中占用大量资源。

我建议您考虑在组件服务中运行COM对象。它可能不是解决方案,但值得探索。

将COM对象放在组件服务中是非常接近你可以编写一个可以通过COM访问的Windows服务 - 我会触摸所有x中的x:其中x是最喜欢的食物而y是最喜欢的地方。

.Net Remoting很棒,但作为一种通信设备大多有趣。我不知道你是否要在许多服务器上拆分它,这听起来像是公司的内部应用程序。我没有足够的细节来更具体。

答案 1 :(得分:1)

看起来你应该试着去寻找简单地在ASP.NET基础结构上重用简单的WinForms代码。这意味着您可能不需要重新编写UI代码,而只需在WinForms的一些基于Web的仿真基础结构上使用它。

请参阅我对该框架的直接建议: http://www.visualwebgui.com/landing/wow.aspx

我希望这会有所帮助......