2008-10-16 10 views
15

मेरे पास एक सामान्य उद्देश्य वर्ग का एक उदाहरण है जिसे एएसपी.नेट और स्टैंड स्टैंड अकेले प्रोग्राम के तहत निष्पादित किया जाएगा। यह कोड उस प्रक्रिया के प्रति संवेदनशील है जहां यह चलाया जा रहा है - यानी, प्रमाणन विधियां हैं जिन्हें एएसपी.NET के तहत चलने पर नहीं कहा जाना चाहिए। आप कैसे निर्धारित करते हैं कि कोड ASP.NET प्रक्रिया में निष्पादित हो रहा है या नहीं?यह निर्धारित करने के लिए कि क्या एएसपी.NET प्रक्रिया में .NET कोड चल रहा है या नहीं?

जिस समाधान का मैं वर्तमान में उपयोग कर रहा हूं उसका उत्तर नीचे दिया गया है।


मैं किसी को क्यों इस सवाल का हो गया है downvoted और/या यह पूछने के लिए एक बेहतर तरीका प्रस्ताव करने के लिए के रूप में एक टिप्पणी जोड़ना होगा कामना करते हैं! मैं केवल इतना मान सकता हूं कि कम से कम कुछ लोगों ने सवाल देखा है और कहा, "क्या बेवकूफ है, एएसपी.नेट कोड .NET कोड है"।

+0

आप निम्न पोस्ट में आपका जवाब हो सकता है। http://stackoverflow.com/questions/2091866/how-can-a-net-code-know-whether-it-is-running-within-a-web-server-application/2092246#2092246 – deostroll

उत्तर

-1

यह मेरा प्रश्न है।

सबसे पहले, सुनिश्चित करें कि आपका प्रोजेक्ट सिस्टम.Web का संदर्भ देता है और आपकी कोड फ़ाइल "System.Web का उपयोग कर रही है"।

public class SomeClass { 

    public bool RunningUnderAspNet { get; private set; } 


    public SomeClass() 
    // 
    // constructor 
    // 
    { 
    try { 
     RunningUnderAspNet = null != HttpContext.Current; 
    } 
    catch { 
     RunningUnderAspNet = false; 
    } 
    } 
} 
+1

वास्तविक अनुरोधों के बाहर काम नहीं करता है। – ygoe

-2
If HttpContext Is Nothing OrElse HttpContext.Current Is Nothing Then 
    'Not hosted by web server' 
End If 
+1

HttpContext एक वर्ग का नाम है, इसलिए HttpContext शून्य नहीं हो सकता है। – yfeldblum

1

मुझे लगता है कि आप वास्तव में क्या करना चाहते हैं अपने डिजाइन पर पुनर्विचार है। ऐसा करने का एक बेहतर तरीका एक फैक्ट्री क्लास का उपयोग करना है जो आपको आवश्यक कक्षाओं के विभिन्न संस्करणों (इंटरफ़ेस को लागू करने के लिए डिज़ाइन किया गया है ताकि आप उन्हें एक दूसरे के साथ उपयोग कर सकें) का उपयोग कर सकें। यह कोड को स्थानीय रूप से वेब-और गैर-वेब-आधारित उपयोग को अपने स्थान पर स्कैटर करने के बजाए एक स्थान पर स्थानांतरित करने के लिए स्थानीयकृत करेगा।

public interface IDoFunctions 
{ 
    void DoSomething(); 
} 

public static class FunctionFactory 
{ 
    public static IDoFunctions GetFunctionInterface() 
    { 
    if (HttpContext.Current != null) 
    { 
     return new WebFunctionInterface(); 
    } 
    else 
    { 
     return new NonWebFunctionInterface(); 
    } 
    } 
} 

public IDoFunctions WebFunctionInterface 
{ 
    public void DoSomething() 
    { 
     ... do something the web way ... 
    } 
} 

public IDoFunctions NonWebFunctionInterface 
{ 
    public void DoSomething() 
    { 
     ... do something the non-web way ... 
    } 
} 
+4

एएसपी.NET के तहत चलते समय छोटी संख्या में विधियों को बुलाया जाने पर मुझे अपवाद को टॉस करना है, जो कि मुझे अपवाद को टॉस करना है। –

+0

यह थ्रेड में चलने पर "असफल" होगा यदि परिभाषा "वर्तमान * वैध * आईआईएस अनुरोध * के साथ चलने" के विपरीत "एक * आईआईएस प्रक्रिया * में चलने" के लिए है, (यह * कुछ मामलों में मामला है)। तो अंत में यह 'HttpContext.Current! = Null' दिखाने के लिए बहुत सी कोड है जिसमें ऊपर उल्लिखित समस्या है .. मैं इस तरह के डिज़ाइन का विरोध नहीं कर रहा हूं, लेकिन यह मूल प्रश्न के लिए स्पर्शपूर्ण है और विशिष्ट संदर्भ की आवश्यकता है उसकाखाता। – user2864740

12

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

+1

'HttpRuntiime.AppDomainAppId' बनाम [गीगाद का उत्तर] (http://stackoverflow.com/a/28993766/9664) का उपयोग करने का क्या फायदा होगा जो' होस्टिंगइन्वायरमेंट.इस्होस्टेड 'का उपयोग करता है? –

2

इस प्रयास करें:

using System.Web.Hosting; 

// ... 

if (HostingEnvironment.IsHosted) 
{ 
    // You are in ASP.NET 
} 
else 
{ 
    // You are in a standalone application 
} 

मेरे लिए काम किया!

जानकारी के लिए देखें ... HostingEnvironment.IsHosted

0
using System.Diagnostics; 

if (Process.GetCurrentProcess().ProcessName == "w3wp") 
    //ASP.NET 
+3

कृपया [संपादित करें] लिंक का उपयोग करें कि यह कोड कैसे काम करता है और केवल कोड न दें, क्योंकि स्पष्टीकरण भविष्य के पाठकों की सहायता करने की अधिक संभावना है। यह भी देखें [उत्तर]। [स्रोत] (http://stackoverflow.com/users/5244995) –

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

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