私の WCF サービスを開始するには、次を使用します。
selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();
ある時点で、これにより のインスタンスが作成されますMyServiceClass
。単一のインスタンスを作成しますか、それともリクエストごとにインスタンスを作成しますか?
私の WCF サービスを開始するには、次を使用します。
selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();
ある時点で、これにより のインスタンスが作成されますMyServiceClass
。単一のインスタンスを作成しますか、それともリクエストごとにインスタンスを作成しますか?
これらの答えはすべて正しいですが、あなたが求めているものよりも複雑に見えます。呼び出しごと、セッションごと、またはシングルトンごとにインスタンスを作成するかどうかの基本は、サービス クラスの属性であるInstanceContextModeによって制御されます。そこから読み始めます。
デフォルトでは、リクエストごとのインスタンスですが、これを変更できます。たとえば、独自のIInstanceProviderを記述して、サービス クラスの寿命を自分で管理できます。
単一のインスタンスに制限したい場合は、サービスクラスを外部でインスタンス化し、インスタンスをサービスホストに渡すことができます:
var myservice = new MyServiceClass();
selfHost = new ServiceHost(typeof(MyServiceClass), myservice); // forces singleton pattern
selfHost.Open();
リクエストごとにインスタンスを作成します。単一のインスタンスが必要な場合は、静的クラスを使用できます。静的クラスは、アプリケーションの存続期間中存在します。呼び出しや新しい WCF 接続が行われるたびに再インスタンス化されるわけではありません。