2012-01-12 15 views
14

वर्तमान अनुरोध के साथ मैं URL को होस्टनाम प्राप्त कर सकते हैं का उपयोग करना:HttpContext.Current का उपयोग किए बिना यूआरएल होस्टनाम का निर्धारण करें?

HttpContext.Current.Request.Url.Host 

लेकिन - मैं वर्तमान अनुरोध (HttpContext.Current) का उपयोग किए बिना URL को होस्टनाम निर्धारित करने के लिए की जरूरत है। इसका कारण यह है कि जब SQL एसक्यूएलेंसी पाई जाती है तो मेरे कोड को SqlDependency से ऑन चेंज कॉलबैक में कॉल किया जाता है। Althougth कोड मेरे वेब ऐप में रहता है, कोई अनुरोध नहीं है, और HttpContext.Current शून्य है।

मुझे उम्मीद थी कि मैं इसे HttpRuntime से पकड़ सकता हूं, लेकिन वहां उपयोग के कुछ भी प्रतीत नहीं होते हैं। क्या कोई तरीका है कि मैं यह जानकारी प्राप्त कर सकता हूं?

+0

हमारी वेब साइटों में से एक किसी भी का जवाब आपूर्ति मेजबान नाम। आने वाले अनुरोध का निरीक्षण किए बिना, हमारे पास पहुंचने के लिए उपयोग किए गए होस्टनाम का पता लगाना मुश्किल होगा। – spender

+0

आप क्या करने की कोशिश कर रहे हैं, और आपका कोड कब चल रहा है? क्या यह एसकएलडैपेन्सीेंसी ऑन चेंज इवेंट में है, ऐप कैश के ऑनमोम कॉलबैक में या कहीं और? – Journey

+0

स्पष्टता के लिए प्रश्न संपादित करें –

उत्तर

3

आप जैसे ही आप ईवेंट हैंडलर सेट कर रहे हैं पर मेजबान जानते हैं तो आप की तरह कुछ (कोड वास्तव में परीक्षण नहीं) करने के लिए सक्षम होना चाहिए:

string host = HttpContext.Current.Request.Url.Host; 
var dep = new SqlDependency(cmd); 
dep.OnChange += ((sender, args) => 
{ 
    DoStuff(host); 
}); 
+0

चीयर्स, मैं इसके लिए भी आ रहा था, इसलिए मानते हुए कि मैं अपना कोड एप्लिकेशन_ऑन स्टार्ट से बाहर कर सकता हूं जैसे सत्र_ऑनस्टार्ट (अनुरोध वस्तु को अनावश्यक बनाने के लिए), जैसा कि आप सुझाव देते हैं, मैं होस्ट में पास कर सकता हूं। –

4

कैसे

के बारे में
Environment.MachineName 
+0

क्षमा करें, यह काम नहीं करेगा, मेरे पास एक ही बॉक्स पर कई उदाहरण हैं, अलग मेजबान बाइंडिंग (site1.xxx.com, site2.xxx.com आदि) –

+0

मुझे आश्चर्य है कि यह संभव है या नहीं उस संदर्भ को निर्धारित करने के लिए जिसके तहत आपका कोड निष्पादित करता है यदि HttpContext गुम है (जैसा आपने कहा था)। –

1

आप वेबसाइट आप देख रहे हैं से जानकारी क्वेरी करने के लिए आईआईएस एपीआई का उपयोग करना चाहिए। क्योंकि आईआईएस कॉन्फ़िगरेशन के आधार पर आपका यूआरएल या होस्टनाम भिन्न हो सकता है। (Hostheaders, बंदरगाह, प्रोटोकॉल और सामान इस तरह के बारे में सोचो।

आईआईएस एपीआई के लिए एक परिचय http://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/

+0

ऐसा करने का एकमात्र तरीका ऐसा लगता है, हालांकि, आईआईएस से पूछताछ के लिए अतिरिक्त अनुमति की आवश्यकता है, इसलिए मुझे लगता है कि मुझे यह देखने की आवश्यकता हो सकती है कि मैं इस मुद्दे को हल कर सकता हूं या नहीं। –

6

पर पाया जा सकता है आप एक वेब अनुप्रयोग से चला रहे हैं, और यह तो सभी प्रबंधित कोड है HttpContext चाहिए मौजूद है। क्या आपके बच्चे की लाइब्रेरी (मान लीजिए कि आपका प्रबंधित कोड लाइब्रेरी में है) के पास System.Web का संदर्भ है? यदि नहीं, तो इस संदर्भ को जोड़ने पर विचार करें। उस बिंदु से आप पूरी तरह से योग्य नामस्थान का उपयोग करके सीधे HttpContext तक पहुंचने में सक्षम होना चाहिए :

System.Web.HttpContext.Current.Request.Url.Host 

किसी भी मामले में, जब तक कि आपका कोड अप्रबंधित न हो या आपका con टेक्स्ट वास्तव में वेब अनुप्रयोग से उत्पन्न नहीं होता है, थ्रेड जिंदा होने पर HttpContext प्रत्येक बिंदु पर उपलब्ध होना चाहिए।

संपादित करें:
नीचे अपनी टिप्पणी पढ़ने के आधार पर, यह लग रहा है SqlDependency की तरह स्वतंत्र रूप से निकाल दिया जा रहा है। हालांकि यह एक ही धागे पर है, इसे सीधे अनुरोध से निकाल दिया नहीं जा रहा है। चूंकि आप जो भी खोज रहे हैं वह मेजबान यूआरएल है, यह असंभव नहीं है कि आप इस जानकारी को उस निर्भरता के लिए जरूरी होने के लिए एक एप्लिकेशन चर या स्थैतिक चर बना सकते हैं।

कुछ भी मैंने देखा है कि HttpContext.Current उपलब्ध नहीं हो सकता है, HttpContext.Request हो सकता है। ये एक ही वस्तु होनी चाहिए, लेकिन वे जरूरी नहीं हो सकते हैं। यह संभव है कि होस्ट वहां पाया जा सके।

+1

HttpContext मौजूद है, लेकिन HttpContext.Current (जो वर्तमान अनुरोध है) नहीं है, क्योंकि वेब ऐप में कोड अनुरोध द्वारा ट्रिगर नहीं किया गया है, यह SQL निर्भरता कॉलबैक द्वारा ट्रिगर किया गया है, इसलिए यह शून्य है। –

+0

क्या आप पेज फ़ील्ड को 'HttpContext.Current' (उदा। _currentContext) पर सेट कर सकते हैं और इसे कॉलबैक में एक्सेस कर सकते हैं? – jrummell

+0

@ मैट रॉबर्ट्स: एक संपादन पोस्ट किया गया। –

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