2009-12-03 27 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