2010-07-05 16 views
19

एक मूल असेंबली में, जो कि Windows सेवा में चलाया जाता है, और वेब अनुप्रयोग में, मुझे प्रति उपयोगकर्ता सत्र जानकारी संग्रहीत करने की आवश्यकता है। सेवा में एक एकल उपयोगकर्ता सत्र होगा, और वेब एप्लिकेशन HttpContext.Current का उपयोग करता है।यह निर्धारित कैसे करें कि एप्लिकेशन वेब एप्लिकेशन

मैं कॉन्फ़िगरेशन पर सम्मेलन - मूल असेंबली के भीतर उपयोग करने के लिए कौन सी विधि कॉन्फ़िगर करना चाहता हूं। मैं इसे केवल एक बार करना चाहता हूं, और मुझे लगता है कि HttpContext.Current अनुप्रयोग_स्टार्ट से चलाए जाने पर शून्य होगा।

मैं कैसे विश्वसनीय रूप से निर्धारित कर सकता हूं कि एप्लिकेशन एक वेब एप्लिकेशन है या नहीं?

उत्तर

34
if(HttpRuntime.AppDomainAppId != null) 
{ 
    //is web app 
} 
else 
{ 
    //is windows app 
} 
1

यदि संभव हो तो मैं क्लास लाइब्रेरी में कुछ प्रारंभिक विधि के लिए इनपुट पैरामीटर के रूप में रखने का सुझाव दूंगा जिसे क्लास लाइब्रेरी का उपयोग करने से पहले कॉल करने की आवश्यकता होगी।

यदि यह कोई विकल्प नहीं है तो मैं HttpRuntime.Cache पर देखता हूं जो मुझे लगता है कि HttpRuntime.Current शून्य है, तो मुझे लगता है कि शून्य नहीं होगा। मैं एक वेबफॉर्म लड़का नहीं हूं लेकिन मुझे याद है कि किसी ने कभी भी इसी तरह के प्रश्न के लिए उल्लेख किया है (अब वह प्रश्न नहीं मिल रहा है)।

11

मैं के लिए

HostingEnvironment.IsHosted 

नोट जाना चाहते हैं एक मामूली भूमि के ऊपर किए गए हैं जब आप इस तरह एक विधानसभा से एक विधि का उपयोग कर रहे हैं, भले ही आप इसे उपयोग करने के लिए इरादा नहीं है नहीं है कि । (System.Web लोड हो जाएगा और कई वर्गों को प्रारंभ किया जा सकता है और JITed।) इसके अलावा, System.Web पर एक कठोर निर्भरता है, इसलिए आप इसे सीमित फ्रेमवर्क सेटिंग में उपयोग नहीं कर सकते (वर्तमान में केवल क्लाइंट प्रोफाइल के साथ आईआईआरसी) ।

एक और तरीका है (हालांकि के रूप में साफ नहीं और दस्तावेज), इस रिटर्न web.config (या एक आवरण संस्करण क्या है), यह शायद एक वेब अनुप्रयोग है, तो

Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) 

जाँच करने के लिए है। (हालांकि आप web.config नामक कॉन्फ़िगरेशन फ़ाइल के साथ कोई एपडोमेन सेट कर सकते हैं, यह संभावित परिदृश्य नहीं है।) यह System.Web पर निर्भरता लेने से बचाता है।

हालांकि, HostingEnvironment.IsHosted यह इंगित करने का इरादा है कि एएसपी.NET के तहत चलाने के लिए कोई एपडोमेन कॉन्फ़िगर किया गया है या नहीं।

1

वेब एप्लिकेशन में विधानसभा.GetEntryAssembly() शून्य है। मैं इसे दो पुस्तकालयों में उपयोग करता हूं और अब तक यह बहुत अच्छा काम करता है।

+0

मैं इस समाधान को दूसरा स्थान देता हूं। एएसपी.नेट के माध्यम से और विंडोज सेवा में वेब संदर्भ में चल रहे कोड के साथ बस इसका परीक्षण किया। –

2

बस इतना कोई भी मेरे जैसा ही गलती नहीं कर रहा है।

असेंबली। GetEntryAssembly() यह परिभाषित करने के लिए काम नहीं करता है कि यह एक वेब एप्लिकेशन है या नहीं। जब यह एक सेवा के रूप में चल रहा है तो विधानसभा.GetEntryAssembly() शून्य हैं, लेकिन जब मैं वीएस से डीबग करता हूं, तो यह शून्य नहीं है।

संबंधित मुद्दे