2

シンプルな WinForms アプリを ASP.Net Web アプリに移行しようとしています。WinForms アプリは、基本的に複雑な単純な C アプリのプレゼンテーション レイヤーにすぎず、COM 相互運用機能を介してレガシ コードと対話します。私は、ASP.Net、javascript、jQuery についてはある程度の経験があり、WinForms と相互運用については多くの経験があるため、基本的なことは知っています。設計上の決定を下す必要があるだけです。

現在のアプリの外観は次のとおりです。

  1. 変更して再コンパイルできるレガシー C (C++ でさえない) コードがたくさんありますが、移植はオプションではありません。これはビジネス+データレイヤーです。好きなように呼んでください。これをレガシー コードと呼びます。

  2. レガシ コードを起動すると、プレゼンテーションとユーザー インタラクションに使用される COM サーバーがインスタンス化されます。プレゼンテーション データはシリアル化されて、この COM オブジェクトに送信され ( 「I'm send you some output.」 )、サイクリック ポーリング ( 「Do you have some input for me?」 ) によってユーザー インタラクションが実現されます。最も美しい解決策ではありませんが、地獄のように簡単です。

  3. COM オブジェクトは、実際には COM として公開された .NET 2.0 WinForms アプリです。このアプリは、.NET Remoting を介して他の .NET アプリにも一部の機能を公開しますが、これもそれほど重要ではありません。

システムはかなり複雑ですが、WinForms アプリは実際には対話のみに使用されるため、Web への切り替えは非常に簡単です。私が確信していないのは、Web サーバー <---> レガシー コードの相互作用を行うための最良の方法です。

(既に .NET Remoting を実装しているため) 最初に思いつくのは、ローカルの .NET Remoting を介して WinForms 機能を Web パーツに公開し、レガシ コードと Web アプリの間のある種のプロキシのように動作させることです。実際には、フォームなしでコミュニケーション部分だけが必要です。その場合、Web アプリは .NET Remoting を介して (ローカルで) この機能にアクセスする必要があります。

Web アプリが .NET Remoting を使用してローカルで別のアプリと通信するのは賢明ですか? また、アプリを Windows サービスに変更することもできますが、その機能を COM を介してレガシ コードに公開することはできますか?

これを達成するためのより良い方法は何でしょうか? 必要に応じて、レガシー コードにいくつかの変更を加えることもできます。

4

2 に答える 2

2

あなたにとって重要な側面の1つは、WinFormsアプリのシングルユーザー性とWebのマルチユーザーセッション性だと思います。

10年前、私はいくつかのWebプロジェクトに携わり、MTSおよびその後のCOM +でCOMオブジェクト(VB6)としてビジネスロジックを実行しました。これらのCOMオブジェクトをセッションに所属させることはできません。ユーザーがたくさん出入りすると、未使用であるが生きているCOMオブジェクトに多くのリソースが拘束される可能性があるためです。

コンポーネントサービスでCOMオブジェクトを実行することを検討することをお勧めします。それは解決策ではないかもしれませんが、調査する価値があります。

コンポーネントサービスにCOMオブジェクトを配置することで、COMを介して到達可能なWindowsサービスを作成することができます。yのすべてのxについて触れます。ここで、xは好きな食べ物、yは好きな場所です。

.Net Remotingは素晴らしいですが、通信デバイスとしてはほとんど興味深いものです。これを多くのサーバーに分割するかどうかはわかりませんが、会社の内部アプリケーションのように聞こえます。具体的に説明するのに十分な詳細がありません。

于 2009-12-04T19:52:16.350 に答える
1

ASP.NET インフラストラクチャ上でシンプルな WinForms コードを単純に再利用する方法を探す必要があるようです。つまり、おそらく UI コードを書き直す必要はなく、Web 上の WinForms のエミュレーティブ インフラストラクチャでそのまま使用するだけです。

まさにそれを行うフレームワークの私の即時の提案を参照してください: http://www.visualwebgui.com/landing/wow.aspx

これがお役に立てば幸いです…</p>

于 2009-12-06T13:28:31.130 に答える