我有一個WCF應用程序,具有多個WSDL Web服務,託管在Windows Server 2008 64位的IIS7中。IIS7中的WCF應用程序:丟失單例實例
當第一個webservice方法被調用時(無論首先調用什麼),應用程序需要爲單例分配一次配置值。
編輯:系統的後端需要使用這種單例方法。
我得到一次分配的配置,但值空再次成爲....
下面是代碼(簡化):
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;
在希望的設置將被每次初始化(造成巨大的開銷,所以它不會是反正一個長期的解決方案)
仍值變爲零。
任何想法?
只要我鬆它一下子就可以了。我用手動按回收測試並沒有中斷。 :-( – Fedearne 2010-10-13 13:03:00