के लिए दो बार बुलाया udnerstand नहीं कर सकते क्यों PerSession
/WCF सेवा के लिए प्रकार निर्माता दो बार फोन कर रहा था। ConcurrencyMode
Multiple
है। बस एक लॉग मुझे लगता है कि static
निर्माता दो बार, पहली बार बुलाया गया था में पांच एक साथ ग्राहकों को जो एक ही WCF सेवा विधि कॉल करते हैं, शुरू करने और एक अन्य ProcessId/ThreadId
साथ 3 सेकंड दूसरी बार के बाद। कन्स्ट्रक्टर में न तो कोई अपवाद और न ही डब्ल्यूसीएफ ट्रेस लॉग। लॉग के अनुसार कन्स्ट्रक्टर निष्पादन समय ~ 10 मिलीसेकंड है। इसके परिणामस्वरूप सभी स्थिर क्षेत्रों को सभी सेवा उदाहरणों के बीच साझा नहीं किया जाता है जैसा कि माना जाता है और 5 क्लाइंट कनेक्शन के मामले में मेरे पास 5 सेवाएं और दो अलग-अलग स्थिर संदर्भ होते हैं, इसलिए ऑनसी स्थिर क्षेत्र में परिवर्तन सभी सेवाओं के लिए प्रतिबिंबित नहीं होता है।स्टेटिक निर्माता PerSession WCF सेवा
यह समस्या बहुत सी बातें confuses के बाद से मैं कुछ स्थिर कैश एकाधिक सेवा उदाहरणों भर में साझा पर भरोसा कर रहा हूँ।
सेवा IIS
में होस्ट की है। कोई आईआईएस पुनरारंभ नहीं होता है, ऐपपूल इस समय अंतराल पर रीसायकल करता है।
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.PerSession,
IncludeExceptionDetailInFaults = true,
ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WcfService
{
private static readonly ILog logger;
private static volatile bool typeInitialized;
static WcfService()
{
try
{
// Here is typeInitialized is false in both calls
logger = LogManager.GetLogger("LogName");
logger.InfoFormat("[PID:{0}] [THID:{1}] BEGIN Static constructor",
Process.GetCurrentProcess().Id,
Thread.CurrentThread.ManagedThreadId);
}
catch (Exception exception)
{
logger.Error("error on type construction stage", exception);
}
finally
{
logger.InfoFormat("[PID:{0}] [THID:{1}] END Static constructor",
Process.GetCurrentProcess().Id,
Thread.CurrentThread.ManagedThreadId);
typeInitialized = true;
}
}
}
यदि आपका लक्ष्य यह सुनिश्चित करना है कि केवल एक उदाहरण बनाया गया है, तो आप इस कक्षा के लिए सिंगलटन पैटर्न को कार्यान्वित करना चाहेंगे: http://en.wikipedia.org/wiki/Singleton_pattern – Nogard
@Nogard और यह इस में पूरी तरह से बेकार होगा मामला आईआईएस कार्यक्रम के कई उदाहरण खोल रहा है, जो सभी अपने स्वयं के सिंगलटन के लिए खुश हैं। स्टेटिक कन्स्ट्रक्टर को केवल क्लास लोड पर ही बुलाया जाता है - लेकिन यह उपयोगकर्ता को अलग-अलग ऐपडोमेन रखने से नहीं रोकता है जो कक्षाओं को अलग-अलग लोड करता है, जैसा आईआईएस के मामले में होता है। – TomTom