0

私は、ASP.NET MVC2 を使用して VB.Net で記述された新しい Web サイトに取り組んでいます。さまざまな複雑なビジネス ロジックに対して「レガシー」VB6 コードを呼び出す必要があります。VB6 は多くの dll で構成されるフレームワークであり、非常にステートフルです。クライアント アプリケーションでフレームワークがどのように使用されるかをほとんどエミュレートしています。次に、ファイルをロードします(さらに多くの状態)。

これを Web アプリで使用できるようにするための「Web サービス インターフェイス フレームワーク」が提供されています。この「Web フレームワーク」は、IIS で実行される薄いレイヤーの背後にあるレガシー コードを隠します。IIS によって提供されるスレッド プールがメモリ使用量などを削減するという考えです。各インスタンスは非常にステートフルであるため、スレッド プールが機能する方法がないため、これを提供した人は要点を見逃していると思わずにはいられません。ユーザーがプールから 1 つの特定のオブジェクトを使用してログオンすると、他のオブジェクトはそのクライアントにサービスを提供できなくなります (状態がないため)。また、Web サービス インターフェイスと関連する SOAP マーシャリングを追加すると、オブジェクトを直接呼び出す場合に比べてオーバーヘッドが大きくなります。

これを行う唯一の方法は、すべてのクライアントによって使用され、完了するまで各呼び出しでブロックされる単一のレガシー インターフェイス インスタンス、または新しいスレッドで作成され、存続する各レガシー インターフェイス オブジェクトを持つクライアントごとのスレッドのいずれかです。クライアントの人生。

これらのどれも理想的ではありませんが、問題のコードの量と、.net への長期にわたる移行プログラム (2 年以上でまだステートフル) では、代替案が思いつきません。元のクライアント アプリを一部の顧客向けに citrix 環境で実行しているため、十分に強力なサーバーがあれば、クライアントごとのスレッドでも問題なく実行でき、フレームワーク自体のオーバーヘッドは、クライアント アプリが関与する場合よりも低くなるはずです。

何か案は??

4

2 に答える 2

1

このフレームワークのVisualWebGuiをご覧になることをお勧めします。私はこの会社の従業員であるため、客観的ではありませんが、Visual WebGuiは、ステートフルアプリケーションのスケーリングとシングルユーザー環境のマルチユーザー環境への変換に関する主要な問題のいくつかを解決したと思います。一見の価値があります。

于 2010-08-25T11:15:44.663 に答える
0

ここにオプションがありますが、きれいではありません。

存続期間の長いオブジェクト (バックエンド層へのステートフル オブジェクト) を個々のユーザーに関連付ける必要があるようです。

このオブジェクトを Application 状態に保存し、キーを使用してユーザーの Session 状態に関連付けることができます。それらすべてを追跡するには、ラッパーを提供する必要があります。セッションが終了すると、イベントをキャプチャしてバックエンド オブジェクトを破棄できます。

アプリケーションの状態は、Session と同様にキーと値のストアです。からアクセスできますHttpContext.Application

これの大きな欠点は、そこに置いたオブジェクトが破棄されるまで残り続けるため、ラッパーとセッションを破棄するコードを適切に配置する必要があることです。それ以外は、これは起動して実行するための迅速な方法かもしれません。

私が言ったように、それは最適ではありませんが、おそらくうまくいくでしょう.

影響の詳細: http://msdn.microsoft.com/en-us/library/bf9xhdz4(VS.71).aspx

編集:

これは、Web ファーム環境でも機能させることができます。ステートフルなレガシ オブジェクトを再作成するために必要な情報を、組み込みの SQL プロバイダーを使用してマシン間で共有できるセッション状態に保存します。ユーザーがオブジェクトが存在しないサーバーにバウンスした場合、アプリケーション状態ラッパーはセッション状態情報からオブジェクトを再作成できます。

これは、必要のないサーバー上のステートフル オブジェクトをクリーンアップする方法を残すだけです。検索ラッパーで、指定されたステートフル オブジェクトにアクセスするたびに、ハッシュ テーブルなどをアクセス時間で更新します。ラッパーで定期的なクリーンアップ ルーチンを実行して、Web アプリのセッション タイムアウト値よりも少し長くアクセスされていないステートフル オブジェクトを破棄します。

于 2010-07-22T12:29:47.410 に答える