【WCF】【C#】WCF ~ インスタンス管理 ~

インスタンス管理

【1】InstanceContextMode (インスタンス化モード) 
【2】ConcurrencyMode (同時実行モード)
【3】ReleaseInstanceMode (インスタンス破棄モード)

【1】InstanceContextMode (インスタンス化モード)

 * WCFでは、サービスのインスタンス化方式が3種類ある。
 ~~~~~
  [1-1] PerCall
   => 一回のサービス呼び出しに対して、1個のサービスインスタンスが作成

  [1-2] PerSession (デフォルト値)
   => クライアントで作成したチャンネル1個のサービスインスタンスが作成

  [1-3] Single
   => すべての呼び出しを1個のサービスインスタンスで処理
 ~~~~~
http://msdn.microsoft.com/ja-jp/library/ms731193.aspx
http://msdn.microsoft.com/ja-jp/magazine/ee309491.aspx

サンプル

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class SampleService : ISampleService
{
     // 処理
}

【2】ConcurrencyMode (同時実行モード)

http://msdn.microsoft.com/ja-jp/library/vstudio/cc681240.aspx
より抜粋

InstanceContextMode 設定および ConcurrencyMode 設定は、相互に影響を与える場合があります。
したがって、これらの設定がパフォーマンスに与える影響を考慮する場合に、
これらの両方の設定を一緒に考慮する必要があります。

 ~~~~~
  [2-1] Reentrant(リエントラント)
   => 1スレッドのみが一度にサービスに入れるが、コールバックが許可されている

  [2-2] Multiple
   => 同時に複数のスレッドがサービスに入れる

  [2-3] Single (デフォルト値)
   => 1スレッドのみが一度にサービスに入れる
   => 新たな要求は待機状態になる
 ~~~~~

使用上の注意

 * セルフ・ホスト(※)の場合、Multiple にしても(それだけでは)マルチスレッド化されない
  => 「UseSynchronizationContext = false」を付加する
サンプル
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
public class SampleService : ISampleService
{
     // 処理
}
※ セルフ・ホストとは?
  => Windows サービスなどでホストさせるプロセスを自分でコーディングする(詳細は以下のサイト参照)
https://www.atmarkit.co.jp/ait/articles/0605/27/news018_2.html
参考文献
https://qiita.com/skuromaku/items/caf0471d3544da5afecd
http://d.hatena.ne.jp/sixpetals/20140204/p1
http://www.pine4.net/Memo/Article/Archives/27
http://uzumakiponpu.blog.fc2.com/blog-entry-42.html

【3】ReleaseInstanceMode (インスタンス破棄モード)

 * インスタンスの生存期間をコントロールする
 ~~~~~
  [3-1] AfterCall
   => WCFサービスメソッド呼び出し後に、インスタンスを破棄する

  [3-2] BeforeCall
   => WCFサービスメソッド呼び出し前に既存のインスタンスを破棄し、新しいインスタンスを作成する

  [3-3] BeforeAndAfterCall
   => WCFサービスメソッド呼び出し前に新しいインスタンスを作成し、呼び出し後にインスタンスを破棄する

  [3-4] None (デフォルト値)
   => インスタンスの破棄は、ServiceBehavior.InstanceContextMode により決定する
 ~~~~~


関連記事

WCF

WCF ~ 基礎知識編 ~
https://blogs.yahoo.co.jp/dk521123/22254537.html