दिलचस्प पोस्ट
कैसे iPhone / iPad डिवाइस पर कुल उपलब्ध / मुक्त डिस्क स्थान का पता लगाने के लिए? जावा कोड बाइट को हेक्साडेसिमल में कनवर्ट करने के लिए Matplotlib में गैर- ASCII वर्ण सी ++ में बेस क्लास के कंस्ट्रक्टर और असाइनमेंट ऑपरेटर का उपयोग कैसे करें? ओरेकल में मूल्यों की सूची से मैं कैसे चुन सकता हूं आप आसानी से कैसे जांच सकते हैं कि प्रवेश फ़ाइल में प्रवेश के लिए निषेध है। NET? माइक्रोसॉफ्ट का उपयोग कर मानव पठनीय तारीख में यूनिक्स टाइमस्टैम्प को कनवर्ट करें I एंड्रॉइड स्पिनर: चयनित आइटम परिवर्तन ईवेंट प्राप्त करें जावा में सूची के लिए मानचित्र को कैसे रूपांतरित करना है? एचबीज़ केर्बरोस कनेक्शन नवीकरण रणनीति साधारण PHP SQL लॉगिन समस्या निवारण पोस्ट अनुरोध json डेटा java HttpUrlConnection भेजें आवेदन। ओपनफॉर्म। गणना = 0 हमेशा मैं .NET में एक यूएसबी वेबकैम से कैसे जुड़ूं? मैं सी # में एक गुमनाम वस्तु के गुणों को कैसे पुनरावृत्त करता हूं?

इस संदर्भ में अनुरोध उपलब्ध नहीं है

मैं आईआईएस 7 एकीकृत मोड चला रहा हूं और मुझे मिल रहा है

इस संदर्भ में अनुरोध उपलब्ध नहीं है

जब मैं इसे Access4Net संबंधित फ़ंक्शन में एक्सेस करने का प्रयास करता हूं जिसे Application_Start से कहा जाता है यह मेरे पास कोड की रेखा है I

 if (HttpContext.Current != null && HttpContext.Current.Request != null) 

और दूसरी तुलना के लिए एक अपवाद फेंका जा रहा है

मैं HttpContext.Current.Request को रिक्त करने के अलावा अन्य और क्या जांच सकता हूं ??


इसी तरह के प्रश्न @ पोस्ट किए गए हैं In7.5 पर runnig mvc जब इस संदर्भ अपवाद में अनुरोध उपलब्ध नहीं है

लेकिन वहां कोई प्रासंगिक जवाब नहीं है

वेब के समाधान से एकत्रित समाधान "इस संदर्भ में अनुरोध उपलब्ध नहीं है"

कृपया IIS7 एकीकृत मोड देखें: Request_start में इस संदर्भ अपवाद में अनुरोध उपलब्ध नहीं है :

"इस संदर्भ में अनुरोध उपलब्ध नहीं है" अपवाद IIS 7.0 पर एकीकृत मोड में एएसपी.नेट अनुप्रयोगों को ले जाने पर प्राप्त होने वाली अधिक सामान्य त्रुटियों में से एक है। यदि आप अनुप्रयोग के शुरू होने वाले अनुरोध के HttpContext तक पहुंचने का प्रयास करते हैं, तो यह अपवाद, वैश्विक.एएसएक्स फ़ाइल में Application_Start विधि के कार्यान्वयन में होता है।

जब आपके पास कस्टम लॉगिंग तर्क होता है, तो यह आवेदन करने के लिए मजबूर होने के बजाय कष्टप्रद है application_start या लॉगर में अपवाद उत्पन्न होता है (भले ही संभाला हो)।

ऐसा प्रतीत होता है कि Request उपलब्धता के लिए परीक्षण के बजाय, आप Handler उपलब्धता के लिए परीक्षण कर सकते हैं: जब कोई Request , तो अभी भी अनुरोध हैंडलर के पास अजीब होगा और Handler लिए परीक्षण Request is not available in this context अपवाद Request is not available in this context खतरनाक Request is not available in this context है।

तो आप अपना कोड बदल सकते हैं:

 var currContext = HttpContext.Current; if (currContext != null && currContext.Handler != null) 

सावधान रहें, एक http मॉड्यूल के संदर्भ में, Handler को परिभाषित नहीं किया जा सकता है, हालांकि Request और Response को परिभाषित किया गया है (मैंने यह देखा है कि BeginRequest घटना में)। इसलिए यदि आपको एक कस्टम http मॉड्यूल में अनुरोध / प्रतिक्रिया लॉगिंग की आवश्यकता है, तो मेरा उत्तर उपयुक्त नहीं हो सकता है।

यह बहुत ही क्लासिक केस है: यदि आप अंत में http उदाहरण से प्रदान किए गए किसी भी डेटा की जांच कर रहे हैं तो उस कोड को BeginRequest घटना के तहत आगे बढ़ने पर विचार करें।

 void Application_BeginRequest(Object source, EventArgs e) 

यह HTTP हेडर, क्वेरी स्ट्रिंग और आदि के लिए जांच करने के लिए सही स्थान है … Application_Start जो सेटिंग्स को पूरे रन टाइम के लिए आवेदन करता है, जैसे रूटिंग, फ़िल्टर्स, लॉगिंग और इसी तरह।

कृपया, स्टैटिक .कैक्टर या क्लासिक मोड पर स्विचिंग जैसे किसी भी वर्कअराउंड पर लागू न करें, जब तक कि कोड को Start टू BeginRequest से नहीं ले जाने का कोई तरीका नहीं है। यह आपके मामलों के विशाल बहुमत के लिए योग्य होना चाहिए।

चूंकि ऐप की शुरुआत के दौरान पाइप लाइन में कोई अनुरोध संदर्भ नहीं है, इसलिए मैं सोच भी नहीं सकता कि अगले सर्वर में कौन सा सर्वर / पोर्ट अगले वास्तविक अनुरोध में आ सकता है। आपको यह आरंभ सेशन पर करना होगा

क्लासिक मोड में नहीं होने पर मैं इसका उपयोग कर रहा हूं I ओवरहेड नगण्य है।

 /// <summary> /// Class is called only on the first request /// </summary> private class AppStart { static bool _init = false; private static Object _lock = new Object(); /// <summary> /// Does nothing after first request /// </summary> /// <param name="context"></param> public static void Start(HttpContext context) { if (_init) { return; } //create class level lock in case multiple sessions start simultaneously lock (_lock) { if (!_init) { string server = context.Request.ServerVariables["SERVER_NAME"]; string port = context.Request.ServerVariables["SERVER_PORT"]; HttpRuntime.Cache.Insert("basePath", "http://" + server + ":" + port + "/"); _init = true; } } } } protected void Session_Start(object sender, EventArgs e) { //initializes Cache on first request AppStart.Start(HttpContext.Current); } 

टिप्पणियों में समझाया ओपी विस्तृत आवश्यकताओं के आधार पर, एक और अधिक उपयुक्त समाधान मौजूद है। ओ पी में कहा गया है कि वह लॉग -4नेट के साथ अपने लॉग में कस्टम डेटा जोड़ना चाहता है, अनुरोधों से संबंधित डेटा

प्रत्येक लॉज 4नेट कॉल को एक कस्टम सेंट्रलाइज्ड लॉग कॉल में लपेटने के बजाय जो अनुरोध संबंधित संबंधित डेटा (प्रत्येक लॉग कॉल पर) को पुन: प्राप्त करने में कामयाब होता है, लॉग इन करने के लिए कस्टम अतिरिक्त डेटा सेट करने के लिए log4net सुविधा संदर्भ शब्दकोश। उन निपुणताओं का उपयोग करने के लिए अपने अनुरोध लॉग डेटा को वर्तमान अनुरोध के लिए BeginRequest ईवेंट पर स्थानांतरित करने की अनुमति देता है, फिर इसे एंडरवेंस्ट ईवेंट पर खारिज करने के लिए। बीच में कोई लॉग इन कस्टम डेटा से लाभ होगा

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

काम करने के लिए इस समाधान के लिए, आपको अपने लॉज 4नेट एपेंडर पर कुछ अतिरिक्त कॉन्फ़िगरेशन की भी जरूरत होगी ताकि वे अपने कस्टम डेटा लॉग इन कर सकें।

यह समाधान एक कस्टम लॉग वृद्धि मॉड्यूल के रूप में आसानी से लागू किया जा सकता है। यहां इसके लिए नमूना कोड है:

 using System; using System.Web; using log4net; using log4net.Core; namespace YourNameSpace { public class LogHttpModule : IHttpModule { public void Dispose() { // nothing to free } private const string _ipKey = "IP"; private const string _urlKey = "URL"; private const string _refererKey = "Referer"; private const string _userAgentKey = "UserAgent"; private const string _userNameKey = "userName"; public void Init(HttpApplication context) { context.BeginRequest += WebAppli_BeginRequest; context.PostAuthenticateRequest += WebAppli_PostAuthenticateRequest; // All custom properties must be initialized, otherwise log4net will not get // them from HttpContext. InitValueProviders(_ipKey, _urlKey, _refererKey, _userAgentKey, _userNameKey); } private void InitValueProviders(params string[] valueKeys) { if (valueKeys == null) return; foreach(var key in valueKeys) { GlobalContext.Properties[key] = new HttpContextValueProvider(key); } } private void WebAppli_BeginRequest(object sender, EventArgs e) { var currContext = HttpContext.Current; currContext.Items[_ipKey] = currContext.Request.UserHostAddress; currContext.Items[_urlKey] = currContext.Request.Url.AbsoluteUri; currContext.Items[_refererKey] = currContext.Request.UrlReferrer != null ? currContext.Request.UrlReferrer.AbsoluteUri : null; currContext.Items[_userAgentKey] = currContext.Request.UserAgent; } private void WebAppli_PostAuthenticateRequest(object sender, EventArgs e) { var currContext = HttpContext.Current; // log4net doc states that %identity is "extremely slow": // http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html // So here is some custom retrieval logic for it, so bad, especialy since I // tend to think this is a missed copy/paste in that documentation. // Indeed, we can find by inspection in default properties fetch by log4net a // log4net:Identity property with the data, but it looks undocumented... currContext.Items[_userNameKey] = currContext.User.Identity.Name; } } // General idea coming from // http://piers7.blogspot.fr/2005/12/log4net-context-problems-with-aspnet.html // We can not use log4net ThreadContext or LogicalThreadContext with asp.net, since // asp.net may switch thread while serving a request, and reset the call context // in the process. public class HttpContextValueProvider : IFixingRequired { private string _contextKey; public HttpContextValueProvider(string contextKey) { _contextKey = contextKey; } public override string ToString() { var currContext = HttpContext.Current; if (currContext == null) return null; var value = currContext.Items[_contextKey]; if (value == null) return null; return value.ToString(); } object IFixingRequired.GetFixedObject() { return ToString(); } } } 

इसे अपनी साइट में जोड़ें IIS 7+ कॉन्फ़ नमूना:

 <system.webServer> <!-- other stuff removed ... --> <modules> <!-- other stuff removed ... --> <add name="LogEnhancer" type="YourNameSpace.LogHttpModule, YourAssemblyName" preCondition="managedHandler" /> <!-- other stuff removed ... --> </modules> <!-- other stuff removed ... --> </system.webServer> 

और उन अतिरिक्त गुणों को लॉग करने के लिए अपेंडर्स सेट करें, नमूना कॉन्फ़िग:

 <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!-- other stuff removed ... --> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message - %property%newline%exception" /> </layout> </appender> <appender name="SqlAppender" type="log4net.Appender.AdoNetAppender"> <!-- other stuff removed ... --> <commandText value="INSERT INTO YourLogTable ([Date],[Thread],[Level],[Logger],[UserName],[Message],[Exception],[Ip],[Url],[Referer],[UserAgent]) VALUES (@log_date, @thread, @log_level, @logger, @userName, @message, @exception, @Ip, @Url, @Referer, @UserAgent)" /> <!-- other parameters removed ... --> <parameter> <parameterName value="@userName" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%property{userName}" /> </layout> </parameter> <parameter> <parameterName value="@Ip"/> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%property{Ip}" /> </layout> </parameter> <parameter> <parameterName value="@Url"/> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%property{Url}" /> </layout> </parameter> <parameter> <parameterName value="@Referer"/> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%property{Referer}" /> </layout> </parameter> <parameter> <parameterName value="@UserAgent"/> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%property{UserAgent}" /> </layout> </parameter> </appender> <!-- other stuff removed ... --> </log4net> 

हाँ। मुझे भी इस समस्या का सामना करना पड़ा एक विचार नहीं मिला मैं "एकीकृत" मोड से "क्लासिक" मोड में जाकर इस समस्या को हल करने में सक्षम था। यहां दिए गए सुझावों के लिए धन्यवाद

आप क्लासिक मोड पर स्विच किए बिना समस्या को प्राप्त कर सकते हैं और अभी भी Application_Start का उपयोग कर सकते हैं

 public class Global : HttpApplication { private static HttpRequest initialRequest; static Global() { initialRequest = HttpContext.Current.Request; } void Application_Start(object sender, EventArgs e) { //access the initial request here } 

किसी कारण से, स्थिर प्रकार अपने HTTPContext में एक अनुरोध के साथ बनाया गया है, जिससे आप इसे स्टोर कर सकते हैं और इसे तुरंत Application_Start इवेंट में पुनः उपयोग कर सकते हैं।

आप निम्न का उपयोग कर सकते हैं:

  protected void Application_Start(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(new WaitCallback(StartMySystem)); } private void StartMySystem(object state) { Log(HttpContext.Current.Request.ToString()); } 

ऐसा करें वैश्विक .asax.cs में करें:

 protected void Application_Start() { //string ServerSoftware = Context.Request.ServerVariables["SERVER_SOFTWARE"]; string server = Context.Request.ServerVariables["SERVER_NAME"]; string port = Context.Request.ServerVariables["SERVER_PORT"]; HttpRuntime.Cache.Insert("basePath", "http://" + server + ":" + port + "/"); // ... } 

एक जादू की तरह काम करता है। यह.संगीत। अनुरोध वहाँ है …

यह। अनुरोध एक जानबूझकर ध्वज पर आधारित अपवाद फेंकता है