2011-08-09 15 views
6

ऐप दो धागे में विभाजित है; मुख्य वेब ऐप और एक सेकेंडरी थ्रेड एसिंक्रोनस इवेंट हैंडलिंग के लिए उपयोग किया जाता है। द्वितीयक थ्रेड को एक ईवेंट प्राप्त होता है जहां इसे मुख्य ऐप (साथ ही अतिरिक्त मार्ग तर्क) के पूर्ण योग्य URL के साथ एक ईमेल भेजने की आवश्यकता होती है।मैं एएसपी.नेट एमवीसी में पृष्ठभूमि थ्रेड से एक एप्लिकेशन यूआरएल कैसे हल करूं?

उदा। http://Server.com/App/RouteData?AdditionalArguments

बेशक पृष्ठभूमि धागे में यूआरएल को हल करने के लिए HttpContext.Current का उपयोग करने की लक्जरी नहीं है, क्योंकि कोई अनुरोध नहीं है। कोई HttpRequest, कोई HttpContext ...

मुझे पता चला कि एएसपी.NET (यहां तक ​​कि एमवीसी के साथ) यूआरएल बनाने के लिए अधिकांश विधियां एचटीपीकॉन्टेक्स्ट पर भरोसा करती हैं। क्या एएसपी.नेट में एचटीपीकॉन्टेक्स्ट या इसके किसी भी डेरिवेटिव का उपयोग किये बिना पूरी तरह से योग्य आवेदन यूआरएल बनाने का कोई तरीका मौजूद है?

UrlHelper.GetApplicationtUrl() 

किसी भी विचार:

मैं की तरह एक धागे की सुरक्षित विधि के लिए देख रहा हूँ? आपके सुझावों का स्वागत है.

उत्तर

1

मुझे यह सही समस्या थी। मैं web.config फ़ाइल में यूआरएल संग्रहित कर दिया। मैं मेरा इतना पसंद आया:

<appSettings> 
    <!-- Urls --> 
    <add key="AppDomain" value="http://localhost:1273/" /> 
    <add key="ConfirmUrl" value="http://localhost:1273/Auth/Confirm/?code={0}" /> 
</appSettings> 

और सेवा परत में इस तरह यह कहा जाता है:

string confirmUrl = string.Format(ConfigurationManager.AppSettings["ConfirmUrl"], confirmCode); 
+0

अधिक प्रयोग के बाद, मैंने यह सबसे अच्छा समाधान पाया। एप्लिकेशन url को खोजने के लिए System_Start पर System.Web.Mvc.UrlHelper का उपयोग करना, फिर इसे सिंगलटन में स्थिर चर में असाइन करना या निर्भरता इंजेक्शन का उपयोग करके इसे कन्स्ट्रक्टर तर्क के रूप में पास करना भी काम करता है। हालांकि, इस समाधान का उपयोग करके अप्रत्याशित असफलताएं आती हैं, जैसे लोड-बैलेंसिंग करने के लिए प्रॉक्सी-सर्वर बेस यूआरएल प्राप्त करना। कॉन्फ़िगरेशन सबसे अच्छा समाधान जैसा प्रतीत होता है क्योंकि लक्ष्य सर्वर पता (और प्रोटोकॉल) हमेशा रनटाइम पर निर्धारित नहीं किया जा सकता है। इसे प्री-सेट करना सबसे अच्छा है। धन्यवाद शॉन :) – Nautic20

0

तुम सिर्फ विन्यास फाइल का उपयोग नहीं कर सकते हैं, जब थ्रेड बनाने, ThreadStart प्रतिनिधि का उपयोग आपको नए धागे की आवश्यकता वाली मूल जानकारी प्रदान करने के लिए।

+0

मैंने इसके बारे में भी सोचा, लेकिन यदि वेब अनुरोध के अलावा कुछ अन्य सेवा विधि को कॉल करता है तो क्या होगा? या विंडोज़ एज़ूर के लिए एक कार्यकर्ता की भूमिका की तरह कुछ। (ठीक है, मेरे मामले के लिए वैसे भी)। –

+0

@ शॉन मक्लेन से सहमत हुए। इस मार्ग से स्थिति के निकट, HttpContext (बेस यूआरएल प्राप्त करने के लिए) का आह्वान करने का आदर्श समय थ्रेडस्टार्ट नहीं होगा क्योंकि यह फिर से माना जाएगा कि आपके पास ऐसे संसाधन हैं जो उस समय उपलब्ध नहीं हो सकते हैं। मैं एप्लिकेशन_स्टार्ट पर बेस यूआरएल प्राप्त करने के लिए अधिक अनुकूल हूं; जो अनुरोध के दौरान होता है और वही समय होता है जब मैं इवेंट हैंडलर को ईवेंट की सदस्यता लेता हूं। – Nautic20