2009-12-03 70 views
2

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

应用程序看起来现在的方式是这样的:

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

  2. 在启动时,遗留代码实例化,其用于呈现和用户交互COM服务器。演示数据被串行化,发送到这个COM对象(“我送你一些输出。”),并通过循环轮询实现用户交互(“你对我有一些输入?”)。不是最漂亮的解决方案,而是像地狱一样简单。

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

虽然系统相当复杂,但WinForms应用程序确实只用于交互,所以很容易切换到网页。我不确定什么是最好的方式来做网页服务器< --->遗留代码交互。

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

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

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

回答

2

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

10年前,我参与了,我们在MTS跑业务逻辑COM对象(VB6),后来COM +多个Web项目。让这些COM对象属于会话是一个禁忌,因为如果用户过来并留下很多,最终可能会有大量的资源被捆绑在未使用但活着的COM对象中。

我建议你看看运行在组件服务您的COM对象。这可能不是解决方案,但值得探讨。

把组件服务中的COM对象放在一起就可以编写一个可以通过COM访问的windows服务 - 我会为y中的所有x提供一些东西:其中x是最喜欢的食物,y是最喜欢的地方。

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

+0

谢谢您的答复。我没有使用组件服务的经验,所以我会先检查一下。 – Groo 2009-12-06 14:34:15

1

看起来你应该试着去寻找简单的重用你的简单的WinForms代码通过ASP.NET基础设施。这意味着你可能不需要重新编写UI代码,而是直接在WinForms over web的某些模拟基础结构上使用它。

请参阅我的一个框架,它正是这么做的直接建议: http://www.visualwebgui.com/landing/wow.aspx

我希望这有助于...

+0

谢谢。但是GUI非常简单,我没有任何将它移植到Web的问题。问题在于WinForms应用程序就像一个普通C应用程序的COM服务器,它是实际实例化的应用程序。这种激活令我困扰。 – Groo 2009-12-06 14:36:29