■ インスタンス管理
【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 により決定する ~~~~~
参考文献
MSDN
http://msdn.microsoft.com/ja-jp/magazine/ee309491.aspxその他のサイト
http://tuotehhou.y.ribbon.to/index.php?%2BWCF%2B%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E7%AE%A1%E7%90%86http://handcraft.blogsite.org/ComponentGeek/ShowArticle/17.aspx
http://csharper.blog57.fc2.com/blog-entry-110.html
https://qiita.com/kenji-yokoi/items/5a5e862d9bbdf89ba935
http://www.pine4.net/Memo/Article/Archives/17