2009-07-29 16 views
12

के साथ त्रुटि मैं एएसपी.NET 2.0 में ब्राउज़र में एक पीडीएफ स्ट्रीम कर रहा हूं। यह एचटीटीपीएस पर आईई को छोड़कर HTTP और सभी ब्राउज़रों पर सभी ब्राउज़रों में काम करता है। जहां तक ​​मुझे पता है, यह आईई के सभी संस्करणों में काम करता है (पिछले 5 वर्षों में या तो), लेकिन हमारे ग्राहकों ने हाल ही में मुद्दों की रिपोर्ट करना शुरू कर दिया है। मुझे संदेह है कि एन्क्रिप्टेड पृष्ठों को डिस्क सुरक्षा विकल्प को डिफ़ॉल्ट रूप से अक्षम करने के लिए उपयोग न करें और कुछ बिंदु पर डिफ़ॉल्ट रूप से सक्षम हो गया (इंटरनेट विकल्प -> उन्नत -> सुरक्षा)। इस विकल्प को बंद करने से काम के आसपास के रूप में मदद मिलती है, लेकिन दीर्घकालिक समाधान के रूप में व्यवहार्य नहीं है।पीडीएफ जेनरेट करना, आईई और एचटीटीपीएस

मैं प्राप्त कर रहा त्रुटि संदेश है:

इंटरनेट एक्सप्लोरर www.sitename.com से OutputReport.aspx डाउनलोड नहीं कर सकते।

इंटरनेट एक्सप्लोरर इस इंटरनेट साइट को खोलने में सक्षम नहीं था। अनुरोधित साइट या तो अनुपलब्ध है या नहीं मिल सकती है। बाद में पुन: प्रयास करें।

पीडीएफ बनाने के लिए उपयोग किया जाने वाला टूल DataDynamics से ActiveReports है।

Response.ClearContent() 
Response.ClearHeaders() 
Response.AddHeader("cache-control", "max-age=1") 
Response.ContentType = "application/pdf" 
Response.AddHeader("content-disposition", "attachment; filename=statement.pdf") 
Response.AddHeader("content-length", mem_stream.Length.ToString) 
Response.BinaryWrite(mem_stream.ToArray()) 
Response.Flush() 
Response.End() 

नोट:: एक बार पीडीएफ बनाई गई है, यहाँ इसे नीचे भेजने के लिए कोड है मैं स्पष्ट रूप से कैश-नियंत्रण निर्दिष्ट नहीं करते हैं तो नेट मेरी ओर से कोई कैश भेजता है, तो मैं स्थापित करने की कोशिश की है कैश-कंट्रोल: निजी या सार्वजनिक या अधिकतम = #, लेकिन उनमें से कोई भी काम नहीं कर रहा है।

यहां मोड़ है: जब मैं प्रतिक्रिया शीर्षकों का निरीक्षण करने के लिए फिडलर चलाता हूं, तो सब कुछ ठीक काम करता है। हेडर मैं प्राप्त होने वाले हैं:

HTTP/1.1 200 ठीक
कैश-नियंत्रण: अधिकतम उम्र = 1
दिनांक: बुध, 29 जुलाई 2009 17:57:58 GMT
सामग्री प्रकार: आवेदन/पीडीएफ
सर्वर: माइक्रोसॉफ्ट आईआईएस/6.0
MicrosoftOfficeWebServer: 5.0_Pub
एक्स संचालित-द्वारा: ASP.NET
एक्स ASPNET-संस्करण: 2.0.50727
सामग्री-स्वभाव: लगाव; फ़ाइल नाम = statement.pdf
सामग्री-एंकोडिंग: gzip
Vary: Accept-एन्कोडिंग
स्थानांतरण-एन्कोडिंग:

chunked जैसे ही मैंने फ़िडलर बंद कर देते हैं और फिर कोशिश करें, यह फिर से विफल रहता है। एक अन्य बात जो मैंने देखी है वह यह है कि जब फिडलर चल रहा है तो मुझे मिलती है इस वेबसाइट के सुरक्षा प्रमाणपत्र चेतावनी संदेश में कोई समस्या है, और मुझे पर क्लिक करना होगा इस वेबसाइट पर जारी रखें (अनुशंसित नहीं) से गुज़रने के लिए। जब फिडलर बंद हो जाता है, तो मुझे इस सुरक्षा चेतावनी का सामना नहीं होता है और यह तुरंत विफल हो जाता है।

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

अपडेट: फिडलर के मुद्दों का समाधान किया गया है, बहुत बहुत धन्यवाद, अब यह लगातार काम करता है (टूटा हुआ, फिडलर के साथ या बिना)।

Google खोज के आधार पर, पूरे वेब पर इस समस्या के बारे में बहुत सारी रिपोर्टें प्रतीत होती हैं, जिनमें प्रत्येक प्रतिक्रिया प्रतिक्रिया शीर्षकों का स्वयं का विशिष्ट संयोजन होता है जो उनके व्यक्तिगत मामलों के लिए समस्या को ठीक करने लगते हैं। मैंने इन सुझावों में से कई को आजमाया है, जिसमें ईटाग, लास्टमोडिफाइड डेट, वेरी हेडर (फिडलर का उपयोग करके) और कैश-कंट्रोल और/या प्रगा हेडर के संयोजन के दर्जनों को शामिल करने सहित कई सुझावों का प्रयास किया है। मैंने ContentType के लिए "सामग्री-स्थानांतरण-एन्कोडिंग: बाइनरी" के साथ-साथ "एप्लिकेशन/बल-डाउनलोड" की कोशिश की। अब तक कुछ भी मदद नहीं मिली है। fewMicrosoftKBarticles हैं, जिनमें से सभी संकेत देते हैं कि कैश-कंट्रोल: नो-कैश अपराधी है। कोई अन्य विचार?

अपडेट: वैसे, पूर्णता के लिए, यह वही समस्या एक्सेल और वर्ड आउटपुट के साथ भी होती है।

अद्यतन: कोई प्रगति नहीं हुई है। मैंने फिडलर से एरिकला तक एसएजेड फ़ाइल को ईमेल किया और वह आईई डीबग करते समय समस्या को पुन: उत्पन्न करने में सक्षम था, लेकिन अभी तक कोई समाधान नहीं है। बाउंटी की समयसीमा समाप्त हो जाएगी ...

उत्तर

2

एक जंगली हंस का पीछा करने पर दो सप्ताह के बाद, मुझे लगता है कि पीडीएफ, एक्सेल या वर्ड दस्तावेज स्ट्रीमिंग जब ' डिस्क को एन्क्रिप्टेड पृष्ठों सेव न करें की इस पद्धति की अनुमति देगा कोड में परिवर्तन के किसी भी संयोजन को खोजने के लिए नहीं कर पाए हैं 'विकल्प चालू है।

माइक्रोसॉफ्ट ने कहा है कि यह व्यवहार कई केबी लेखों और निजी ईमेल में डिज़ाइन द्वारा है। ऐसा प्रतीत होता है कि जब ' एन्क्रिप्टेड पृष्ठों को डिस्क' पर सहेजें नहीं, तो विकल्प चालू है कि IE सही तरीके से व्यवहार कर रहा है और ऐसा करने के लिए कहा जाता है। This post सबसे अच्छा संसाधन मैं अब तक पाया है बताते हैं कि क्यों यह सेटिंग सक्षम किया जाएगा और पेशेवरों और इसे सक्षम बनाने के विपक्ष:

" ' डिस्क को एन्क्रिप्टेड पृष्ठों सेव न करें' एसएसएल (एचटीटीपीएस) कनेक्शन से निपटने के दौरान खेल में आता है। बस एक वेब सर्वर की तरह फाइल को कैश करने के तरीके के बारे में पूरी जानकारी भेज सकती है, जो मूल रूप से इंटरनेट एक्सप्लोरर को एसएसएल (एचटीटीपीएस) कनेक्शन के दौरान फ़ाइलों को कैश में सहेजने के लिए सेट नहीं कर सकता है, भले ही वेब सर्वर आपको सलाह दे सकता है।

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

नकारात्मक क्या है? धीरे-धीरे प्रदर्शन, क्योंकि कैश में कुछ भी बचाया नहीं गया है, फिर भी पृष्ठ पर एक दर्जन बार इस्तेमाल किए गए 1 बाइट gif छवि को प्रत्येक बार वेबसर्वर से लाया जाना चाहिए। मामले को बदतर कुछ उपयोगकर्ता क्रियाओं विफल हो सकता है इस तरह के रूप डाउनलोड की गई फ़ाइलों को हटा दिया जाएगा और एक त्रुटि प्रस्तुत या खोलने पीडीएफ दस्तावेजों कुछ परिदृश्यों नाम के लिए असफल हो जायेगी बनाने के लिए। "

सबसे अच्छा समाधान हम कम से पा सकते हैं

"का प्रयोग करें 'खाली अस्थाई इंटरनेट फ़ाइल फ़ोल्डर ब्राउज़र बंद करने पर': इस बिंदु हमारे ग्राहकों और उपयोगकर्ताओं के लिए बातचीत करने के लिए इस सेटिंग का उपयोग करने के लिए है कि विकल्प मौजूद है। प्रत्येक बार ब्राउजर बंद होने पर सभी फाइलें कैश से शुद्ध हो जाएंगी, यह मानते हुए कि ब्राउजर के किसी अन्य इंस्टेंस से फाइल पर लॉक नहीं है या कुछ बाहरी एप्लीकेशन हैं।

' का उपयोग करने से पहले बहुत सारे विचारों को देने की आवश्यकता है डिस्क' पर एन्क्रिप्टेड पृष्ठों को न सहेजें। एक महान सुरक्षा सुविधा की तरह लगता है और यह है लेकिन इस सुविधा का उपयोग करने के नतीजे आपकी मदद डेस्क कॉल डाउनलोड विफलताओं या धीमी प्रदर्शन के लिए बढ़ सकते हैं।"

0

आईई का कौन सा संस्करण? मुझे याद है कि माइक्रोसॉफ्ट ने इस मुद्दे के लिए a Hotfix for IE6 जारी किया था। उम्मीद है कि कुछ उपयोग है?

+1

आईई 6, आई 7 और आईई 8 सभी प्रभावित हैं। – wweicker

3

आपका कैश-कंट्रोल हेडर गलत है। यह कैश-कंट्रोल होना चाहिए: अधिकतम आयु = 1 बीच में डैश के साथ। पहले यह तय करने का प्रयास करें कि यह एक फर्क पड़ता है या नहीं।

आमतौर पर, मैं कहूंगा कि सबसे संभावित अपराधी आपका वरी हेडर है, क्योंकि ऐसे शीर्षलेख अक्सर IE में कैशिंग के साथ समस्याएं पैदा करते हैं: http://blogs.msdn.com/ieinternals/archive/2009/06/17/9769915.aspx। आप प्रतिक्रिया शीर्षलेखों में ETAG जोड़ने का प्रयास करना चाह सकते हैं।

फिडलर को कैशबिलिटी पर कोई प्रभाव नहीं होना चाहिए (जब तक कि आप नियम नहीं लिखते), और ऐसा लगता है जैसे आप कह रहे हैं कि यह करता है, जो बताता है कि शायद किसी प्रकार की समय की समस्या है।

> इस्तेमाल किया डिस्क सुरक्षा विकल्प को एन्क्रिप्टेड पृष्ठों सेव न करें डिफ़ॉल्ट रूप से अक्षम होने

यह विकल्प अभी भी डिफ़ॉल्ट रूप से अक्षम हालांकि IT व्यवस्थापक बदल सकते है (IE6, 7 में, और 8), यह समूह नीति के माध्यम से, और कुछ प्रमुख कंपनियां ऐसा करती हैं।

संयोग से, फिडलर चलाने के दौरान आपको प्रमाणपत्र त्रुटि दिखाई देने का कारण यह है कि आपने फिडलर रूट प्रमाणपत्र पर भरोसा करने के लिए चुना नहीं है; इस विषय पर अधिक के लिए http://www.fiddler2.com/fiddler/help/httpsdecryption.asp देखें।

+0

आपकी विस्तृत प्रतिक्रिया के लिए धन्यवाद। मैंने कैश-कंट्रोल हेडर तय किया, और एक ईएजी जोड़ा, जिसमें से कोई भी समस्या ठीक नहीं हुई। फिडलर रूट सर्टिफिकेट पर भरोसा करने के लिए चुनने के बाद मैं अब फिडलर चल रहा है जब समस्या को पुन: उत्पन्न कर सकता हूं। ऐसा करने से पहले, पीडीएफ "इस वेबसाइट पर जारी रखें (अनुशंसित नहीं)" पर क्लिक करने के बाद काम करेगा, जैसा कि आप कहते हैं, शायद किसी प्रकार की समय की समस्या है। – wweicker

+0

यदि फिडलर के अंदर, आप "वेरी" प्रतिक्रिया शीर्षलेख को हटाने के लिए फ़िल्टर टैब का उपयोग करते हैं, तो क्या कोई बदलाव है? – EricLaw

+0

वेरी हेडर को हटाने के बाद कोई बदलाव नहीं ...: ~ \ – wweicker

0

मैंने आपके कैश-कंट्रोल हंस चेस का पढ़ा है, लेकिन अगर यह मदद करता है तो मैं mine, that met my needs साझा करूंगा।

1

हमें लंबे समय से इसी तरह की समस्या का सामना करना पड़ा - हमने जो किया वह (यह जावा ईई है)। वेब अनुप्रयोग config में हम जोड़ने

<mime-mapping> 
    <extension>PDF</extension> 
    <mime-type>application/octet-stream</mime-type> 
</mime-mapping> 

यह किसी भी पीडीएफ अपने वेब अनुप्रयोग से आ रही ब्राउज़र रेंडर करने के लिए कोशिश कर के बजाय डाउनलोड किया जा करने के लिए कर देगा।

संपादित करें: ऐसा लगता है कि आप इसे स्ट्रीम कर रहे हैं। उस स्थिति में आप अपने कोड में एप्लिकेशन/ऑक्टेट-स्ट्रीम के रूप में एक माइम-प्रकार का उपयोग करेंगे और कॉन्फ़िगरेशन में नहीं। तो

Response.ContentType = "application/pdf" 

के बजाय यहां आप gzip संपीड़न निष्क्रिय करने के लिए प्रयोग करेंगे

Response.ContentType = "application/octet-stream" 
+0

दुर्भाग्यवश इससे मदद नहीं मिली। : ~/ – wweicker

0

कोशिश।

+0

gzip संपीड़न को बंद करने से मदद नहीं मिली। :( – wweicker

1

मैंने पाया कि यह मेरे लिए काम करने के लिए लग रहा था:

Dim browser As System.Web.HttpBrowserCapabilities = Request.Browser 
If (browser.Browser = "IE") Then 
    Response.AppendHeader("cache-control", "private") ' ie only 
Else 
    Response.AppendHeader("cache-control", "no-cache") ' all others (FF/Chrome tested) 
End If 
2

मुझे लगता है मैं स्ट्रीम करने के लिए चाहते थे पीडीएफ फाइलों के साथ एक समान समस्या थी यहां तक ​​कि Response.ClearHeaders() साथ मैं Pragma और Cache- देखा। रनटाइम पर कंट्रोल हेडर जोड़े गए थे। समाधान आईआईएस में हेडर को साफ़ करना था (राइट-क्लिक -> पीडीएफ लोड करने वाले पेज पर गुण, फिर "एचटीपी हेडर" टैब)

1

सोल्वेड: यह एक आईई समस्या है, नहीं एपीआई से cation ... इसे इसके साथ ठीक करें: http://support.microsoft.com/kb/323308 यह लंबे समय तक प्रयास करने के बाद मेरे लिए सही काम करता है।

ATT: Mr.Dark

0

इसे यहाँ उम्मीद है कि किसी को मिल सकती है इस उपयोगी बजाय लिंक के माध्यम से जा जोड़ना।

यहाँ मेरी कोड

byte[] bytes = // get byte array from DB 

    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.Buffer = true; 

    // Prevent this page from being cached. 
    // NOTE: we cannot use the CacheControl property, or set the PRAGMA header value due to a flaw re: PDF/SSL/IE 
    Response.Expires = -1; 

    Response.ContentType = "application/pdf"; 
    // Specify the number of bytes to be sent 
    Response.AppendHeader("content-length", bytes.Length.ToString()); 

    Response.BinaryWrite(bytes);  

      // Wrap Up 
    Response.Flush(); 
    Response.Close(); 
    Response.End(); 
0

ओपी मैं दिन यह काम करने के लिए प्राप्त करने की कोशिश के लिए मेरे सिर खरोंच था जैसा है, लेकिन मैं अंत में यह किया इसलिए मैंने सोचा कि मैं अपने 'संयोजन' का हिस्सा था शीर्षलेख:

  if (System.Web.HttpContext.Current.Request.Browser.Browser == "InternetExplorer" 
       && System.Web.HttpContext.Current.Request.Browser.Version == "8.0") 
      { 
       System.Web.HttpContext.Current.Response.Clear(); 
       System.Web.HttpContext.Current.Response.ClearContent(); 
       System.Web.HttpContext.Current.Response.ClearHeaders(); 
       System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream"; 

       System.Web.HttpContext.Current.Response.AppendHeader("Pragma", "public"); 
       System.Web.HttpContext.Current.Response.AppendHeader("Cache-Control", "private, max-age=60"); 
       System.Web.HttpContext.Current.Response.AppendHeader("Content-Transfer-Encoding", "binary"); 

       System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + document.Filename); 
       System.Web.HttpContext.Current.Response.AddHeader("content-length", document.Data.LongLength.ToString()); 

       System.Web.HttpContext.Current.Response.BinaryWrite(document.Data); 
      } 

आशा है कि किसी को कहीं दर्द बचाएगा!

0

मैं एसएसएल पर पीडीएफ स्ट्रीम करने और इसे आईफ्रेम या ऑब्जेक्ट के अंदर रखने के प्रयास के साथ एक ही समस्या में भाग रहा था। मुझे लगता है कि मेरा एएसपीएक्स पृष्ठ यूआरएल के गैर-सुरक्षित संस्करण पर रीडायरेक्ट रखेगा, और ब्राउज़र इसे अवरुद्ध करेगा।

मुझे एएसपीएक्स पेज से एएसएचएक्स हैंडलर में स्विच करने के लिए मेरी रीडायरेक्शन समस्या तय हुई।

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