2

Juval Löwy の Programming WCF Services を読んでいます。それは言及しています:

WCF には、インスタンスを持つ Context があります。デフォルトでは、コンテキストの存続期間は、それがホストするインスタンスの存続期間と同じです。両方に別々の寿命を持つことができます。WCF では、関連付けられたインスタンスがまったくなくてもコンテキストが存在することもできます。

なぜインスタンスを解放してコンテキストを空のままにするのでしょうか?

4

2 に答える 2

1

偶然にも、私は最近あなたがおそらく言及している章を読みました。彼の本の中でLöwyは、なぜこれが役立つのかを説明しています。最初に彼は書いています:

WCFでは、インスタンスがまったく関連付けられていなくてもコンテキストが存在することもできます。このインスタンス管理手法をコンテキスト非アクティブ化と呼びます。

これは通常、特定のReleaseInstanceModeでOperationBehaviorを使用して行われると述べた後、彼は続けて、これをいつ使用できるかについてヒントを与えます。

通常、インスタンスの非アクティブ化は、すべてではありませんが一部のサービスメソッドに適用するか、異なるメソッドに異なる値を適用します。[...]通常、散発的に適用する理由は、均一に適用すると、通話ごとのようなサービスになってしまうためです。この場合、サービスを通話ごとに構成した方がよいでしょう。 。

したがって、この「非アクティブ化」を使用して、セッションを持つサービスの特定のメソッドのみが、呼び出しごとのサービスの一部であるかのように動作するようにすることができます。上記のMSDNの記事でも、これについて別の言い方で説明しています。

ReleaseInstanceModeプロパティを使用して、メソッドの実行中にWCFがサービスオブジェクトをリサイクルするタイミングを指定します。デフォルトの動作は、InstanceContextMode値に従ってサービスオブジェクトをリサイクルすることです。ReleaseInstanceModeプロパティを設定すると、そのデフォルトの動作が変更されます。トランザクションシナリオでは、ReleaseInstanceModeプロパティは、メソッド呼び出しを処理する前に、サービスオブジェクトに関連付けられた古いデータが確実にクリーンアップされるようにするためによく使用されます。

于 2012-10-15T22:43:18.583 に答える
0

インスタンスからコンテキストを切断することは、次の場合に意味があります。

  1. インスタンスの作成はカスタマイズ/拡張されています。たとえば、依存性注入ライブラリ (Unity など) を使用してカスタム IInstanceProvider を使用してサービス インスタンスを作成する場合、Unity ライフタイム マネージャーでサービス インスタンスのライフタイムを処理することが必要になる場合があります。

  2. 一部の操作では、高価なサービス インスタンスが無効になります。次に例を示します。 サービス オブジェクトは、作成の一部として大きな費用のリソースを読み込みます。クライアントによって呼び出されたサービス操作によってリソースが変更または無効化された場合は、リソースを破棄して、次の呼び出し元のために再読み込みする必要があります。操作がリソースを無効にしない場合、サービス インスタンスは次の呼び出し元で再利用できます。(ほとんどの場合、この問題を解決するためのより良い方法がありますが、WCF ではそれが可能です)。

追加のユースケースがあると確信しています。

于 2012-10-16T15:41:56.630 に答える