1

WCFで、ServiceBehaviourのInstanceContextModeを具体的に指定しない場合、次のデフォルトモードは何ですか?

  1. PerCall
  2. PerSession
  3. 独身

ありがとう。

4

2 に答える 2

3

デフォルト値について説明しているドキュメントPerSessionです。しかし、basichttpbindingの使用のように、使用されるバインディング(バインディングサポートセッションを行う)にも依存すると思いますPerCall

于 2013-02-07T12:23:49.997 に答える
1

簡単な答えは、デフォルトのインスタンス化モードはPerSession

提供された:

  • 使用しているセッションタイプはセッションをサポートします
  • [バインディングタイプのセッションサポート](https://docs.microsoft.com/en-us/dotnet/framework/wcf/system-provided-bindings)を参照してください。
  • チャネルがセッションを作成しない場合、動作はあたかもそうであるかのようになりPerCallます。
  • サービス契約はセッションを許可します-デフォルトは「許可」です

これは、コードで必須に構成されたデフォルトのMicrosoft提供のサンプルです。 デフォルトの動作サンプル

[ServiceBehavior(  
AutomaticSessionShutdown=true,  
ConcurrencyMode=ConcurrencyMode.Single,  
InstanceContextMode=InstanceContextMode.PerSession,  
IncludeExceptionDetailInFaults=false,  
UseSynchronizationContext=true,  
ValidateMustUnderstand=true)]
public class CalculatorService : ICalculator { ... }

このMicrosoftの記事(セッションの使用)でセッションについて読んだことで、セッションの開閉方法と、これがインスタンス化と同時実行にどのように関連しているかを理解する上で特に啓蒙的であることがわかりました。

デフォルトでは、WCFクライアントは新しいセッションを作成します。これによりサーバーインスタンスが作成されます。セッション中のすべての呼び出しは会話と呼ばれ、サーバーの単一インスタンス(Instancing)によって単一スレッド(同時実行)で処理されます。そのセッション/クライアント/会話専用。

WCFでデフォルトのインスタンス化動作を使用する場合、WCFクライアントオブジェクト間のすべての呼び出しは同じサービスインスタンスによって処理されます。したがって、アプリケーションレベルでは、セッションはローカルコールの動作と同様のアプリケーションの動作を有効にするものと考えることができます。たとえば、ローカルオブジェクトを作成する場合:

コンストラクターが呼び出されます。

WCFクライアントオブジェクト参照に対して行われる後続のすべての呼び出しは、同じオブジェクトインスタンスによって処理されます。

オブジェクト参照が破棄されると、デストラクタが呼び出されます。

デフォルトのサービスインスタンスの動作が使用されている限り、セッションはクライアントとサービス間で同様の動作を可能にします。

答えを見つけるのに時間がかかったので、これが誰かに役立つことを願っています。

于 2018-06-19T06:27:27.007 に答える