状態管理
- PerCall
一回のサービス呼び出しに対して1個のサービスインスタンスが作成
- PerSession
クライアントで作成したチャンネル1個のサービスインスタンスが作成
- Single
すべての呼び出しを1個のサービスインスタンスで処理
利用例:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class Service1 : IService
{
}
モード | インスタンスの生成 | インスタンスの廃棄 | 特徴 | PerCall | クライアントから呼び出された時 | 呼び出し完了と同時に | インスタンス生存期間が短い CPUやメモリなどのリソース消費最小 スケーラビリティ高いサービスの構築 | PerSession | チャンネルからの最初の呼び出しがあった時 | チャンネルが閉じられた時 | 状態管理が必要なサービスに適している(インスタンス毎) | Single | サービスが開始された時 | サービスが終了された時 | 状態の共有が容易 |
メモリ上のサービスインスタンスの廃棄はガベージコレクタが行うから、ガベージコレクタ起動するまでメモリ上に残っている。
IDisposable を実装した廃棄は、インスタンスが生存している間だけリソースを確保されるようになり、リソースを効率的に利用できる。
IDisposable を実装しても、サービスのインスタンスはガベージコレクタが起動するまで解放しない。
- 呼び出しの制限 (MaxConcurrentCalls) デフォルトは 64
- インスタンス数の制限 (MaxConcurrentInstances) デフォルトは Int32.MaxValue
- セッション数の制限 (MaxConcurrentSessions) デフォルトは 10
本当にほしかったのはこういうブログだったんだ
コメント:
|