2008-12-24 11 views
16

MSDN के अनुसार, सिस्टम के भीतर कक्षाओं का उपयोग करना विशेष रूप से अच्छा विचार नहीं है। विंडोज सेवा या एएसपी.NET सेवा में नामस्थान को स्थानांतरित करना। अब मैं एक क्लास लाइब्रेरी विकसित कर रहा हूं जिसे इस विशेष नामस्थान (फोंट को मापने के लिए) तक पहुंचने की आवश्यकता हो सकती है, लेकिन इसकी गारंटी नहीं दी जा सकती है कि होस्ट प्रक्रिया एक सेवा नहीं है।सिस्टम। विंडोज या एएसपी.नेट सेवाओं में ड्राइविंग

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

मेरी समस्या है: सिस्टम को निकालने के लिए मैं सुरक्षित रूप से कैसे पता लगा सकता हूं? ड्रॉइंग सुरक्षित है?

मुझे लगता है कि मैं या तो

  • अगर GDI उपलब्ध है अगर मौजूदा प्रक्रिया Windows सेवा या ASP.NET सेवा
  • का पता लगाने है पता लगाने चाहिए
  • या हो सकता है वहाँ प्रणाली पूछने के लिए एक रास्ता है यदि यह

दुर्भाग्य से, मैं इन दृष्टिकोणों में से किसी एक को लागू करने के लिए किसी भी तरीके से नहीं आ सकता हूं। क्या किसी को कोई ख़याल है?

+0

आपको फ़ॉन्ट से संबंधित चीजों की जांच करने की आवश्यकता क्यों है? जैसा कि मैं समझता हूं कि विंडोज़ सेवाओं में यूआई नहीं है। कारण समझने में मदद करें। – shahkalpesh

+0

विवरण में जाने के बिना, यह वर्ग लाइब्रेरी रिपोर्ट जेनरेट करती है, जिसे संभावित रूप से होस्ट प्रक्रिया द्वारा ई-मेल में भेजा जा सकता है। कार्यों में से एक को स्ट्रिंग की रेंडर चौड़ाई को मापने की आवश्यकता होती है। मुद्दा यह है कि यह अन्य कंप्यूटरों पर प्रदर्शित किया जा सकता है, न कि सर्वर पर। –

+0

मुझे GDI + (System.Drawing) सुरक्षित उपयोग करने के लिए मिला है, जब तक कि आप सभी डिस्पोजेबल ऑब्जेक्ट्स का सही ढंग से निपटान करते हैं, सही त्रुटि हैंडलिंग करते हैं, और [सभी बग से बचें] (http://nathanaeljones.com/163/20 -image-आकार बदलने-नुकसान /)। 10K-60K वेबसाइटों के साथ चल रहा है [imageresizing।नेट लाइब्रेरी (जो डिफ़ॉल्ट रूप से, छवियों को गतिशील रूप से आकार देने के लिए जीडीआई + का उपयोग करती है)] (http://imageresizing.net), अभी तक सिस्टम से संबंधित एक स्थिरता समस्या नहीं है। उपयोग को रोकना। हालांकि, जब तक आप सिस्टम का उपयोग नहीं करते हैं। ठीक से ड्रॉइंग, आप * आसानी से * स्थिरता समस्याएं बना सकते हैं। –

उत्तर

18

-Oisin किसी भी भ्रम को स्पष्ट करने के लिए, System.Drawing ASP.NET और सेवाओं के अंतर्गत काम करता है, यह सिर्फ नहीं समर्थित है। उच्च भार (अप्रबंधित संसाधनों से बाहर चलना), स्मृति या संसाधन लीक (बुरी तरह कार्यान्वित या निपटान पैटर्न कहा जाता है) और/या संवाद दिखाने के लिए कोई डेस्कटॉप नहीं होने पर संवाद हो सकते हैं।

परीक्षण बाद वाले का ख्याल रखेगा, और निगरानी आपको पूर्व को सतर्क करेगी।लेकिन, अगर आपको कोई समस्या हो, तो पीएसएस को कॉल करने और फिक्स के लिए पूछने की उम्मीद न करें।

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

यदि आप कुछ समर्थित चाहते हैं, तो आपको यह जानना होगा कि आप अंतःक्रियात्मक रूप से चल रहे हैं या नहीं। व्यक्तिगत रूप से, मैं शायद इसे कहीं भी या अन्य गैर-इंटरैक्टिव ध्वज सेट करने के लिए होस्टिंग ऐप पर छोड़ दूंगा। आखिरकार, ऐप यह निर्धारित करने के लिए सबसे अच्छी स्थिति में है कि क्या वे एक होस्टेड वातावरण में हैं और/या जीडीआई + मुद्दों को जोखिम उठाना चाहते हैं।

लेकिन, यदि आप पूर्ण रूप से अपने अपने परिवेश का पता लगाने के लिए चाहते हैं, मैं वहाँ बदतर जवाब एक सेवा के लिए right here on SO पेशकश कर रहे हैं की तुलना में लगता है। सारांशित करने के लिए, आप या तो ServiceBase से विरासत में हैं या सिस्टम.कंसोल तक पहुंचने का प्रयास करने के लिए EntryAssembly देख सकते हैं। एएसपी.नेट के लिए, उसी लाइन के साथ, HttpContext.Current का पता लगाना पर्याप्त होना चाहिए।

मैं चाहते लगता वहाँ एक कामयाब रहे या पी/AppDomain बंद एक डेस्कटॉप देखने के लिए जिस तरह से (जो वास्तव में यह सब में परिभाषित करने कारक है, मुझे लगता है कि) और/या कुछ आह्वान जायें जो कि सुराग होगा आप अंदर हैं। लेकिन मुझे यकीन नहीं है कि यह क्या है, और एमएसडीएन इस पर प्रबुद्ध होने से कम है।

संपादित करें: MSDN Trolling, मैं ने कहा कि यह वास्तव में एक Window Station (जो एक डेस्कटॉप होस्ट करता है) महत्वपूर्ण बिट यहाँ है कि। उस जानकारी के साथ, मैं GetProcessWindowStation() ढूंढने में सक्षम था जो वर्तमान विंडो स्टेशन पर एक हैंडल देता है। GetUserObjectInformation() पर हैंडल को पास करने से आपको USEROBJECTFLAGS स्ट्रक्चर मिल जाएगा, यदि आपके पास एक दृश्यमान डेस्कटॉप है तो WSF_VISIBLE के साथ dwFlags होना चाहिए।

वैकल्पिक रूप से, EnumWindowsStations आपको उन स्टेशनों की एक सूची देगा जो आप जांच सकते हैं - WinSta0 इंटरैक्टिव है।

लेकिन, हाँ, मैं अभी भी सिर्फ अनुप्रयोग एक गुण सेट या कुछ ज्यादा आसान मार्ग है होने लगता है ....

संपादित फिर से: 7 साल बाद, मैं clued Environment.UserInteractive में मिल जहां एमएस does the exact GetProcessWindowStation dance मैंने आपके लिए ऊपर वर्णित किया है .... मैं अभी भी होस्टिंग ऐप को प्रतिनिधि देने की अनुशंसा करता हूं (वे तेज, लेकिन थोड़ा जोखिम भरा सिस्टम चाहते हैं। पथ खींचना), लेकिन UserInteractive इसे पिनवोक के बिना एक अच्छा डिफ़ॉल्ट लगता है तुम्हरे द्वारा।

1

आप इसके बजाय TextRenderer का उपयोग कर सकते हैं। मुझे पता है कि ASP.NET में System.Windows.Forms से कुछ उपयोग करना अजीब है, लेकिन ऐसा लगता है कि एएसपी.NET में समर्थित नहीं होने के बारे में एक ही चेतावनी नहीं है। मैंने एएसपी.NET अनुप्रयोगों में तारों को मापने के लिए TextRenderer और Graphics.MeasureString दोनों का उपयोग किया है, इसलिए वे दोनों काम करते हैं। मैंने सिस्टम के बारे में चेतावनी कभी नहीं देखी थी। एएसपी.नेट में सलाह नहीं दी जा रही है।

टेक्स्ट रेन्डरर ग्राफिक्स की तुलना में बहुत धीमी है। मेजरस्ट्रिंग, एफडब्ल्यूआईडब्ल्यू।

+0

सिस्टम। ड्रॉइंग एएसपी.नेट वेब अनुप्रयोगों में उपलब्ध है, लेकिन एएसपी.नेट वेब सेवाओं में नहीं। –

+0

यकीन नहीं है कि मैं आपका अनुसरण करता हूं। सिस्टम। ड्रॉइंग एएसपी.नेट वेब अनुप्रयोगों और एएसपी.नेट वेब सेवाओं से उपलब्ध है। मैंने बस यह सुनिश्चित करने के लिए कोशिश की। – MusiGenesis

+0

यह वास्तव में उपलब्ध है, यह सिर्फ इतना है कि इसे उपयोग करने की सलाह नहीं दी जाती है। Http://msdn.microsoft.com/en-us/library/system.drawing.aspx देखें (एक बड़ा नीला बॉक्स ढूंढें) –

-1

आप सिस्टम.Drawing.dll को अपने एप्लिकेशन के बिन में कॉपी करने में सक्षम हो सकते हैं और फिर इसे इस तरह उपयोग कर सकते हैं। इससे इसकी उपलब्धता की गारंटी हो सकती है।

अपने आवेदन में संदर्भ पर बस ठीक क्लिक करें और के लिए विकल्प बदलने के स्थानीयसत्य पर कॉपी करें।

मैं सवाल हालांकि गलतफहमी हो सकती है ...

+0

समस्या सिस्टम के रूप में उपलब्धता नहीं है। Drawing.dll .NET Framework का हिस्सा है। समस्या यह है कि जीडीआई मौजूद होने के बिना, यह ठीक से काम नहीं कर सकता है। –

+0

सही - अब मैं समझता हूं – Hugoware

0

यह GDI सबसिस्टम एक जाँच धागा की आवश्यकता होगी, के साथ कुछ हो सकता है। यदि ऐसा है, तो शामिल एएसपीएक्स पेज के लिए अपने @PAGE निर्देश में ASPCOMPAT = TRUE निर्दिष्ट करने की जांच करें। यह एसटीए थ्रेड, आईआईआरसी में एएसपीएक्स पेज चलाएगा।

4

भले ही यह आधिकारिक रूप से समर्थित नहीं है, मैंने सिस्टम का उपयोग किया है। बिना किसी प्रदर्शन या विश्वसनीयता की समस्याओं के कारण वर्षों के लिए उच्च मात्रा वाले वेब सर्वर (दोनों वेब एप्लिकेशन और वेब सेवाओं) पर कक्षाओं को निकालना।

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

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