私は、ASP.NET MVC2 を使用して VB.Net で記述された新しい Web サイトに取り組んでいます。さまざまな複雑なビジネス ロジックに対して「レガシー」VB6 コードを呼び出す必要があります。VB6 は多くの dll で構成されるフレームワークであり、非常にステートフルです。クライアント アプリケーションでフレームワークがどのように使用されるかをほとんどエミュレートしています。次に、ファイルをロードします(さらに多くの状態)。
これを Web アプリで使用できるようにするための「Web サービス インターフェイス フレームワーク」が提供されています。この「Web フレームワーク」は、IIS で実行される薄いレイヤーの背後にあるレガシー コードを隠します。IIS によって提供されるスレッド プールがメモリ使用量などを削減するという考えです。各インスタンスは非常にステートフルであるため、スレッド プールが機能する方法がないため、これを提供した人は要点を見逃していると思わずにはいられません。ユーザーがプールから 1 つの特定のオブジェクトを使用してログオンすると、他のオブジェクトはそのクライアントにサービスを提供できなくなります (状態がないため)。また、Web サービス インターフェイスと関連する SOAP マーシャリングを追加すると、オブジェクトを直接呼び出す場合に比べてオーバーヘッドが大きくなります。
これを行う唯一の方法は、すべてのクライアントによって使用され、完了するまで各呼び出しでブロックされる単一のレガシー インターフェイス インスタンス、または新しいスレッドで作成され、存続する各レガシー インターフェイス オブジェクトを持つクライアントごとのスレッドのいずれかです。クライアントの人生。
これらのどれも理想的ではありませんが、問題のコードの量と、.net への長期にわたる移行プログラム (2 年以上でまだステートフル) では、代替案が思いつきません。元のクライアント アプリを一部の顧客向けに citrix 環境で実行しているため、十分に強力なサーバーがあれば、クライアントごとのスレッドでも問題なく実行でき、フレームワーク自体のオーバーヘッドは、クライアント アプリが関与する場合よりも低くなるはずです。
何か案は??