2

ユーザーがアーリーバウンドエンティティを介してDynamicsCRM2011データを操作できるようにするASP.Netアプリがあります。

現在、ServiceContextとOrganizationServiceProxyをセッションに保存しています。これは、特定のタイプのオブジェクトを取得し、ユーザーが必要とするときに関連するエンティティを取得する必要があるためです。最後に、ユーザーが保存を押したときにそれらを更新します。

ServiceContextとOrganizationServiceProxyがIDisposableを実装していることを知っているので、破棄する必要があります。現在、Global.asaxのセッション終了時にこれを行っています。

私は自分の考えをテストしている最中ですが、エンティティを取得するとき、またはプロセス全体が完了したときに、実際にはプロキシとコンテキストの両方をインスタンス化して破棄する必要がありますか?

すべてのMSガイドは、オブジェクトが破棄されるようにプロセス全体をusingステートメントでラップすることを示していますが、プロセスでユーザーの操作が必要な場合はどうなりますか?

4

1 に答える 1

1

1ページのリクエストごとにOrganizationServiceProxyを1回だけ使用する場合を除いて、リクエストごとに1回だけOrganizationServiceProxyを遅延ロードする共通関数を作成し、アンロードメソッドを使用してロードされた場合はそれを破棄します(「このアプローチの安全性のための「アンロード」メソッド)

これは、ほとんどの状況で意味があります。Usingステートメントについて特別なことは何もありませんが、disposeメソッドが呼び出されることを事実上保証していることを忘れないでください。いくつかのエッジケースが原因で、よりクリーンなコードのためにdisposeが呼び出されず、1つのリクエストに対して5つの異なる接続が開かれないという、許容できるリスクに値する場合があります。

人々がコーヒーやバスルームの休憩に行く可能性があり、未使用の開いている接続がたくさんあるため、セッションにコンテキストとプロキシを保存することは非常に危険だと思います。

于 2012-08-01T15:34:46.193 に答える