38366


掲題の件、WCFサービスのクラスでシングルトンのクラスを利用しようとしています。  
その場合、AサービスでシングルトンのクラスSを生成した後、  
Bサービスで再びSのインスタンスを取得した場合、Aサービスで取得したSのインスタンスと  
Bサービスで取得したSのインスタンスは同一のインスタンスとなりますか？

WCFサービスが動作するJavaでいうとTomcat上で動作しているイメージがあるので、  
上記のような場合、どうなるのか知りたいです。  
なお、ここで言っているシングルトンのクラスとはWCFサービスのシングルトンサービスの  
ことではありません。例えば、InstanceContextMode.PerCallやPerSessionのサービス内で  
シングルトンクラスを利用した場合の話になります。

よろしくお願いいたします。


CC BY-SA 3.0
2017-10-02T09:08:45.023
38363
2017-10-02T10:25:51.573
2017-10-02T09:19:23.187
9228
9228
question
c# iis wcf
WCFサービス上でシングルトンのクラスを利用するとインスタンスは共有されますか？


単純に`static`フィールドを利用してシングルトンパターンを実装している場合の動作ということでしょうか。これは各サービスのホスティング状況によります。

`static`フィールドのスコープは`AppDomain`ですので、`AppDomain`もしくはより上位のホスティングしているプロセス(IISであればワーカープロセス)が変化している場合は値が共有されません。IISの同じアプリケーション上にサービスを配置して1サーバーで動作させる場合であれば、プロセスがリサイクルされると値がリセットされることなります。これは標準設定だと20分ごとに発生します。

ですので数分間有効な簡単なキャッシュ程度であれば通常のシングルトンパターンを利用できますが、確実性を求めるのであればDBその他のバックエンドを利用した方が良いです。


CC BY-SA 3.0
2017-10-02T10:25:51.573
38366
2017-10-02T10:25:51.573
5750
38363
answer