У меня есть приложение WCF с несколькими веб-сервисами WSDL, размещенное в IIS7 на 64-битной Windows Server 2008.
Приложению требуется, чтобы синглтон был назначен с некоторыми значениями конфигурации один раз, когда вызывается первый метод веб-сервиса(независимо от того, что вызывается первым).
Редактировать: Бэкэнд системы требует использования этого одноэлементного подхода.
Конфигурацию назначают один раз, нозначения снова становятся нулевыми ....
Вот код (упрощенно):
public class SingletonSettings
{
private static readonly SingletonSettings _s;
public SingletonSettings Instance { get {return _s;} }
public object SomeValue { get; set; }
}
public abstract class AbstractWebservice
{
static AbstractWebservice()
{
WebserviceGlobalInitializer.Initialize();
}
}
//Just a webservice
public class Webservice1 : AbstractWebservice, ISomeServiceConctract1
{
public void DoStuff1();
}
//Just a webservice
public class Webservice2 : AbstractWebservice, ISomeServiceConctract2
{
public void DoStuff2();
}
internal class WebserviceGlobalInitializer
{
private static readonly object Lock = new object();
private static bool Initialized = false;
public static void Initialize()
{
lock (Lock)
{
if (!Initialized)
{
InitStuff();
Initialized = true;
}
}
}
private static void InitStuff()
{
string s = SingletonSettings.Instance.SomeValue = "just a ref";
}
}
WebserviceGlobalInitializer.InitStuff()
вызывается только один раз.Тем не менее SingletonSettings.SomeValue
становится нулевым .....
Проблема возникает случайно.
Я пытался
1) Вызвать WebserviceGlobalInitializer.Initialize()
из обычного конструктора в базекласс.
2) Комментарий: Initialized = true;
в надежде на то, что настройки будут каждый раз инициализироваться (что приводит к значительным накладным расходам, так что в любом случае это не будет долгосрочным решением)
Тем не менеезначение становится нулевым.
Есть идеи?