2

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

该应用程序现在的外观是这样的:

  1. 有一堆遗留的 C(甚至不是 C++)代码可以更改和重新编译,但移植不是一种选择。这是业务+数据层,随便叫什么。我将其称为遗留代码

  2. 启动时,遗留代码会实例化一个用于演示和用户交互的 COM 服务器。演示数据被序列化并发送到这个 COM 对象(“我正在向你发送一些输出。”),并且通过循环轮询(“你有一些输入给我吗?”)来实现用户交互。不是最漂亮的解决方案,但非常简单。

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

虽然系统比较复杂,但是WinForms app确实只用于交互,所以切换到web还是很容易的。我不确定做 Web 服务器 <---> 遗留代码交互的最佳方式是什么。

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

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

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

4

2 回答 2

2

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

10 年前,我参与了几个 Web 项目,我们在 MTS 和后来的 COM+ 中将业务逻辑作为 COM 对象 (VB6) 运行。让这些 COM 对象属于会话是不可以的,因为如果用户经常来来去去,您最终可能会发现大量资源被捆绑在未使用但仍然存在的 COM 对象中。

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

将 COM 对象放入 Component Services 与编写可通过 COM 访问的 Windows 服务一样接近——对于 y 中的所有 x,我都会触及这一点:其中 x 是最喜欢的食物,y 是最喜欢的地方。

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

于 2009-12-04T19:52:16.350 回答
1

似乎您应该尝试寻找在 ASP.NET 基础结构上简单地重用您简单的 WinForms 代码的方法。这意味着您可能不需要重新编写 UI 代码,而只需在 WinForms over web 的一些仿真基础架构上按原样使用它。

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

我希望这会有所帮助……</p>

于 2009-12-06T13:28:31.130 回答