ローカルIISで問題を確認しました。
これは私のコードです。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service : IService
{
public static int _counter = 0;
public string GetData()
{
_counter++;
return _counter.ToString();
}
}
デフォルトのIIS構成では、アプリケーションプルごとに1つのプロセスが実行され、このコードは期待どおりに機能します。結果は、サービス呼び出しごとに増分されます。
InstanceContextMode
スレッドを管理しないため、これは理にかなっています。それは生涯の生涯を制御するだけInstanceContext
です。
可変データに静的変数を使用することをベストプラクティスとして検討することはまだできないことを知っています。IISは「WebGarden」として構成できます。この構成は、アプリケーションプールごとに複数の作業プロセスが許可され、すべてのプロセスが静的変数の独自のコピーを持つことを意味します。
http://www.iis.net/ConfigReference/system.applicationHost/applicationPools
すべてのWCFクライアント呼び出しで使用できるオブジェクトを作成するにはどうすればよいですか?IISでそれを行うことは可能ですか、それともWindowsサービスでWCFサービスをホストする必要がありますか?
オブジェクトは、データベースや分散キャッシュなどの永続ストレージに保存する必要があります。IISは依然としてサービスの優れたホストであり、Windowsサービスで実行できるすべての機能に加えてさらに多くの機能を提供します。