Wednesday 31 January 2018

Gethrforexception - ioexception - जब - कोशिश


मेरे पास कुछ आईओ कोड है जो एक कोशिश के भीतर एक स्ट्रीम को पढ़ता है..चुनें यह IOException पकड़ता है और सिस्टम को कॉल करता है। Runtime. InteropServices. Marshal. GETHRForException () पकड़ में, HResult पर आधारित विभिन्न कार्यों को लेने के प्रयास में। कुछ ऐसा है: लेकिन ट्रस्टेडियम के साथ एएसपी के भीतर इस कोड को चलाने से मुझे यह अपवाद मिलता है: कुछ प्रश्न: मुझे लगता है कि अपवाद उत्पन्न हो रहा है क्योंकि GetHRForException को अप्रबंधित कोड में बुलाता है, जिसे मध्यम विश्वास में अनुमति नहीं है। सही यह अपवाद निकाला जा रहा है, गेटहार्टफ़ोअर एक्सप्शन के निष्पादन के समय नहीं, बल्कि उस समय विधि बनने जा रहा है - सही (स्टैकट्र्रेस मेरी पद्धति से पता चलता है, लेकिन मैं निश्चित तौर पर 99 हूं कि कोई आईओ अपवाद नहीं हुआ है) यदि ऐसा है, क्या मुझे आंशिक विश्वास के वातावरण में व्यवहार भिन्न करने के लिए कोई रास्ता नहीं है, जिससे कि मैं GetHRForException (अप्रबंधित कोड) को कॉल न करूं, जहां इसे अनुमति नहीं है दूसरे शब्दों में, मैं कैसे समय के संकलन में जेआईटी को सफल होने की अनुमति दे सकता हूं रनटाइम पर मूल्यांकन करना चाहिए कि कोड को GetHRForException कॉल करना चाहिए () कुछ ऐसा है: मुझे लगता है कि परीक्षण के लिए एक रनटाइम तंत्र है यदि अनुमतियां उपलब्ध हैं, लेकिन इसे खोजने में सक्षम है। संपादित करें क्या इस ब्लॉग आलेख का जवाब माइक्रोसॉफ्ट के शॉनफा कहते हैं कि आप कोशिश नहीं कर सकते किसी LinkDemand द्वारा संरक्षित विधि के आसपास पकड़ो (सुरक्षाएक्सेप्शन) यदि MethodA () मेथोडब () को कॉल करता है, और मेथोडब () को पूर्ण विश्वास के लिए लिंकडिमांड के साथ चिह्नित किया जाता है, तो LinkDemand की जाँच की जाती है, साथ में MethodA Jited है इसलिए SecurityException से बचने के लिए, मुझे एक अलग विधि में Marshal. GetHRForException निकालने की आवश्यकता है I क्या यह सही मेरे कोड पर लागू हुआ है, MethodA () कोड हो सकता है जो कॉल को पढ़ें, और फिर पकड़ में GetHRForException () कॉल करने का प्रयास करता है। GetHRForException है MethodB ()। LinkDemand का मूल्यांकन किया जाता है जब MethodA () JITd है (यह लिंकडिमांड मेरे मध्यम ट्रस्ट एएसपी परिदृश्य में विफल रहता है) अगर मैं GetHRForException को एक नई विधि, मेथड सी () में स्थानांतरित कर लेता हूं, और एक अनिवार्य अनुमति के बाद ही मेथड सी () को कॉल करता हूं। डेमण्ड () सफलतापूर्वक सफल होता है, सैद्धांतिक रूप से मुझे सुरक्षा के समय से जबाव करने में सक्षम होना चाहिए, क्योंकि मेथड सी () अनुमति के बाद ही जेआईटीडी। डेमैन () सफल हो गया। जुलाई 12 09 को 14:20 पूछा सुरक्षा की आवश्यकता है। यह इंगित करता है कि अनुमति की अनुमति है या नहीं, यह सही या झूठे देता है। यह एक अनुमति की मांग नहीं करता है, जैसा कि SecurityPermission. Demand () है। मैं SecurityPermissionFlag. UnmanagedCode के साथ IsUnresticted का उपयोग करने के लिए यह देखने के लिए उपयोग करता हूं कि क्या असेंबली कोड को कॉल करने की अनुमति दी गई है, और उसके बाद केवल अगर अनुमत कोड को कॉल करें तो अनुमति दें एक अतिरिक्त मोड़ है। JIT कंपाइलर, एक विधि संकलित करते समय, CodeAccessPermission LinkDemands के लिए किसी भी विधि पर जांचता है जिसे मेरी संकलित विधि को संकलित किया जाता है। मार्शल। GETHRForException () एक लिंकडिमांड के साथ चिह्नित है इसलिए, मेरी पद्धति जो मार्शल को कॉल करती है। GETHRForException () JIT संकलन के समय एक अनजाने सुरक्षाएक्साशन फेंकता है, जब एक प्रतिबंधित वातावरण में चलाया जाता है, जैसे कि मध्यम विश्वास के साथ एएसपी। इसलिए, हमें उस विधि में कभी जीआईटी नहीं करना चाहिए जो मार्शल को बुलाती है। GETHRForException () उस मामले में, जिसका मतलब है कि मुझे मार्शल को आउट करना होगा। GETHRForException () को मेरे कोड में एक अलग विधि में कहा जाता है जिसे (और इस तरह सीमित किया जाता है) केवल तब जब UnmanagedCode अप्रतिबंधित। यहाँ कुछ उदाहरण कोड है: उत्तर 20 जुलाई 09:17 पर हाँ उत्तर - मध्यम ट्रस्ट कॉल को अप्रबंधित कोड में अनुमति नहीं देगा। एकमात्र विश्वास के स्तर पर यह पूर्ण विश्वास है। निर्भर करता है। सीएएस की मांग रनटाइम में हो सकती है, लेकिन होस्टिंग पर्यावरण भी एक भटकने पर जा सकते हैं और उन चीज़ों की खोज कर सकते हैं जो यह नहीं कर सकते। आप जांच कर सकते हैं कि क्या आप सुरक्षा प्रत्याशा के एक उदाहरण के साथ सीएएस मांग का उपयोग करके अप्रबंधित कोड को कॉल कर सकते हैं। सीएएस की मांग करने के लिए कोड ऐसा लग रहा है जैसे 12 जुलाई को 14:32 उत्तर दिया गया, ठीक है, यह बहुत अच्छी जानकारी है यह क्यू 3 के भाग बी को शामिल करता है लेकिन क्या एक भाग के बारे में मैं कैसे सफल होने के लिए JIT संकलन प्राप्त कर सकता हूँ क्या मैं एक सुरक्षा विशेषता के साथ मेरी विधि को चिह्नित कर सकता हूं या याद रखें, मेरा सिद्धांत यह है कि रनटाइम पर सुरक्षाप्रदर्शन त्रुटि नहीं हो रही है, यह जेआईटी के दौरान हो रहा है - और मुझे लगता है कि आपने पुष्टि की है कि यह संभव है। तो सवाल यह है कि मैं किस कोड को लिखने के लिए JIT को संकलित करने की अनुमति देता हूं। ndash cheeso 12 जुलाई 09 15:50 यह क्रम समय पर हो रहा है, अन्यथा विधानसभा भी लोड नहीं होगा - और इसके लिए विधानसभा होने की अनुमति की आवश्यकता के रूप में चिह्नित किया जाना चाहिए। फिर भी वह यकीनन एक रनटाइम चेक होता है, क्योंकि यह असेंबल लोड पर होगा, जो रनटाइम पर हो सकता है ndash blowdart Jul 12 09 at 16:24 विभिन्न प्रकार की जांच, लिंक मांग एक विधि पर विशेषता है, और वास्तव में जेआईटी के समय में जाँच की जाती है। यह रूपरेखा के द्वारा बहुत अधिक उपयोग किया गया है और इसे सीएलआर स्रोत के बाहर देखने के लिए दुर्लभ है मैं जो दिखाता हूं एक अनिवार्य मांग है, सुरक्षाप्रमाणन की तरह एक घोषणात्मक नहीं है (सुरक्षाएक्शन। लिंकडैंड, अप्रतिबंधित सत्य) ndash blowdart जुलाई 12 09 पर 18: 55 यह सब एक साथ रखकर पिछले अनुभागों में वर्णित है कि कोशिश कैसे करें पकड़। और अंत में ListOfNumbers वर्ग में writeList विधि के लिए कोड ब्लॉक। अब, कोड के माध्यम से चलें और जांचें कि क्या हो सकता है जब सभी घटकों को एक साथ रखा जाता है, तो लिखित विधि निम्न की तरह दिखती है जैसा कि पहले बताया गया है, इस पद्धति का प्रयास है कि ब्लॉक में तीन अलग-अलग निकास संभावनाएं हैं, जिनमें उनमें से दो हैं। कोशिश वक्तव्य में कोड विफल हो जाता है और एक अपवाद फेंकता है। यह एक नया IFOException हो सकता है जो कि नए फ़्वाइटराइटर स्टेटमेंट या इंडेक्सऑउटबॉउड एक्सपेशेशन के कारण फॉर लूप में गलत इंडेक्स वैल्यू के कारण होता है। सब कुछ सफल हो जाता है और कोशिश वक्तव्य सामान्य रूप से निकलता है इन दो निकास संभावनाओं के दौरान लिस्ट विधि में क्या होता है, यह देखते हैं। परिदृश्य 1: एक अपवाद होता है एक बयान जो बनाता है FileWriter कई कारणों से विफल हो सकता है। उदाहरण के लिए, FileWriter के लिए कन्स्ट्रक्टर IOException फेंकता है यदि प्रोग्राम इंगित नहीं किया जा सकता है या फ़ाइल को लिख सकता है। जब FileWriter एक IOException फेंकता रनटाइम सिस्टम तत्काल प्रयास किए गए ब्लॉक विधि कॉल को निष्पादित करने से रोकता है, जिसे पूरा नहीं किया जा रहा है। रनटाइम सिस्टम तब उपयुक्त अपवाद हैंडलर के लिए विधि कॉल स्टैक के शीर्ष पर खोज करना शुरू करता है। इस उदाहरण में, जब IOException होता है, तो FileWriter कन्स्ट्रक्टर कॉल स्टैक के शीर्ष पर होता है। हालाँकि, FileWriter कंस्ट्रक्टर के पास एक उपयुक्त अपवाद हैंडलर नहीं है, इसलिए रनटाइम सिस्टम विधि कॉल स्टैक में अगले विधि 151 को लिस्ट विधि 151 की जांच करता है। WriteList विधि में दो अपवाद हैंडलर हैं: IOException के लिए एक और IndexOutOfBoundsException के लिए एक रनटाइम सिस्टम में लिस्ट 39 के हैंडलर लिखते हैं, जिसमें वे प्रयास बयान के बाद दिखाई देते हैं। पहला अपवाद हैंडलर का तर्क IndexOutOfBoundsException है। यह फेंक दिया अपवाद के प्रकार से मेल नहीं खाता है, इसलिए रनटाइम सिस्टम अगले अपवाद हैंडलर 151 IOException की जांच करता है। यह अपवाद के प्रकार से मेल खाता है जो फेंका गया था, इसलिए रनटाइम सिस्टम एक उपयुक्त अपवाद हैंडलर के लिए अपनी खोज समाप्त कर देता है। अब जब रनटाइम को एक उपयुक्त हेन्डलर मिला है, उस कैच ब्लॉक में कोड निष्पादित होता है। अपवाद हैंडलर निष्पादित करने के बाद, रनटाइम सिस्टम अंत में ब्लॉक को नियंत्रण से गुजरता है। आखिरकार ब्लॉक में संहिता इसके ऊपर पकड़े हुए अपवाद की परवाह किए बिना निष्पादित होती है। इस परिदृश्य में, FileWriter कभी नहीं खोला गया था और इसे बंद करने की आवश्यकता नहीं है। आखिरकार ब्लॉक को निष्पादित करने के बाद, कार्यक्रम अंततः ब्लॉक के बाद पहली बयान के साथ जारी है। यहाँ ListOfNumbers प्रोग्राम से पूरा आउटपुट दिखाई देता है जो IOException फेंक दिया जाता है। निम्न प्रविष्टि में बोल्डफेस कोड इस परिदृश्य के दौरान निष्पादित बयान दिखाता है: परिदृश्य 2: सामान्य रूप से प्रयास करें ब्लॉक निकलता है इस परिदृश्य में, प्रयास ब्लॉक के दायरे के भीतर सभी बयान सफलतापूर्वक निष्पादित हो और कोई भी अपवाद नहीं फेंकें। निष्पादन प्रयास ब्लॉक के अंत में गिर जाता है, और रनटाइम सिस्टम अंत में ब्लॉक को नियंत्रण से गुजरता है। क्योंकि सब कुछ सफल हुआ था, PrintWriter खुला है जब नियंत्रण अंत में ब्लॉक तक पहुँच जाता है, जो PrintWriter बंद कर देता है। दोबारा, आखिरकार ब्लॉक समाप्त करने के बाद, कार्यक्रम अंततः ब्लॉक के बाद पहली बयान के साथ जारी है। यहां ListOfNumbers प्रोग्राम से आउटपुट दिया गया है जब कोई अपवाद नहीं फेंक दिया जाता है। निम्न नमूने में बोल्डफेस कोड इस परिदृश्य के दौरान निष्पादित होने वाले विवरण दिखाता है।

No comments:

Post a Comment