2010-01-26 19 views
56

मैं आईआईएस 7 सही ढंग से ASP.NET MVC से एक JSON परिणाम सेक बनाने कठिनाई आ रही है साथ ASP.NET MVC से एक JSON परिणाम सेक। मैंने आईआईएस में स्थिर और गतिशील संपीड़न को सक्षम किया है। मैं फिडलर के साथ सत्यापित कर सकता हूं कि सामान्य पाठ/एचटीएमएल और इसी तरह के रिकॉर्ड संपीड़ित होते हैं। अनुरोध को देखते हुए, स्वीकृति-एन्कोडिंग gzip शीर्षलेख मौजूद है। प्रतिक्रिया में mimetype "एप्लिकेशन/जेसन" है, लेकिन संपीड़ित नहीं है।मैं कैसे करूँ आईआईएस 7.5

मैं पहचान मुद्दा माइम प्रकार से संबंधित प्रतीत होता है कि है। जब मैं mimeType="*/*" शामिल करता हूं, तो मैं देख सकता हूं कि प्रतिक्रिया सही ढंग से gzipped है। मैं वाइल्डकार्ड माइम टाइप का उपयोग किए बिना आईआईएस को संपीड़ित कैसे कर सकता हूं? मुझे लगता है कि इस मुद्दे के साथ कुछ ऐसा करना है जिस तरह एएसपी.नेट एमवीसी सामग्री प्रकार शीर्षलेख उत्पन्न करता है।

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

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="false"> 
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> 
    <dynamicTypes> 
     <add mimeType="text/*" enabled="true" /> 
     <add mimeType="message/*" enabled="true" /> 
     <add mimeType="application/x-javascript" enabled="true" /> 
     <add mimeType="application/json" enabled="true" /> 
    </dynamicTypes> 
    <staticTypes> 
     <add mimeType="text/*" enabled="true" /> 
     <add mimeType="message/*" enabled="true" /> 
     <add mimeType="application/x-javascript" enabled="true" /> 
     <add mimeType="application/atom+xml" enabled="true" /> 
     <add mimeType="application/xaml+xml" enabled="true" /> 
     <add mimeType="application/json" enabled="true" /> 
    </staticTypes> 
</httpCompression> 
+1

मैं के बाद से मैं IE8 के साथ एक अजीब समस्या का सामना कर रहा हूँ एक वाइल्डकार्ड माइम प्रकार उपयोग नहीं कर सकते हैं - यह कठिनाई एक .zip फ़ाइल को डाउनलोड करने का अनुरोध आगे आईआईएस द्वारा gzipped है प्रतीत होता है। फ़ायरफ़ॉक्स 3.5 अप्रभावित है। –

उत्तर

57

सुनिश्चित करें कि आपके % WinDir बनाओ% \ System32 \ inetsrv \ config \ applicationHost.config इन में शामिल हैं:

<system.webServer> 
    <urlCompression doDynamicCompression="true" /> 
    <httpCompression> 
     <dynamicTypes> 
     <add mimeType="application/json" enabled="true" /> 
     <add mimeType="application/json; charset=utf-8" enabled="true" />  
     </dynamicTypes> 
    </httpCompression> 
</system.webServer> 

@AtanasKorchev की link से।

जैसा कि @simon_weaver टिप्पणियों में कहा गया है, आप 64 बिट विंडोज़ पर 32 बिट संपादक के साथ गलत फ़ाइल संपादित कर रहे हैं, यह सुनिश्चित करने के लिए नोटपैड.एक्सई का उपयोग करें कि यह फ़ाइल वास्तव में संशोधित है।

+2

एनटीओई के लिए अद्यतन लिंक: यदि 'applicationHost.config' मुझे याद आ रहा है तो आप 32 बिट संपादक का उपयोग कर 64 बिट मशीन पर हैं।पाठ्यक्रम के बैकअप बनाने के बाद नोटपैड आज़माएं। http://www.west-wind.com/weblog/posts/2008/Aug/09/Editing-Applicationhostconfig-on-64-bit-Win2008 आईआईएस 8 उपयोगकर्ताओं के लिए –

+1

ध्यान दें: * यह भी आईआईएस 8 के लिए * –

+0

काम करता है घंटे, घंटे मैं आपको बता, मैं घंटे खर्च किया है क्यों मेरे Gzipped आवेदन/json मेरी आईआईएस से बाहर आने नहीं किया गया था की खोज करने की कोशिश कर रहा ... यह अंत में काम किया! धन्यवाद! –

21

मैं सफलतापूर्वक इस्तेमाल किया है दृष्टिकोण here पर प्रकाश डाला।

+9

मैंने पहले उस लेख को देखा होगा, लेकिन इसे नया या उपयोगी कुछ भी नहीं जोड़ने के रूप में खारिज कर दिया। खैर, यह है कि अन्य माइम प्रकार के विपरीत, आप ASP.NET MVC से आवेदन/json प्रतिक्रियाओं संपीड़ित करने के लिए आईआईएस 7 के लिए सामग्री एन्कोडिंग निर्दिष्ट करने की आवश्यकता प्रतीत होता है। कह रहा है कि 'एप्लिकेशन/जेसन' पर्याप्त नहीं है; इसे 'एप्लिकेशन/जेसन' होना चाहिए; charset = utf-8'। –

+0

वह मुझे भी थोड़ा सा :) –

+0

NTOE: यदि 'applicationHost.config' मुझे याद आ रहा है तो आप 32 बिट संपादक का उपयोग कर 64 बिट मशीन पर हैं। पाठ्यक्रम के बैकअप बनाने के बाद नोटपैड आज़माएं। http://www.west-wind.com/weblog/posts/2008/Aug/09/Editing-Aplicationhostconfig-on-64-bit-Win2008 –

5

मैं this approach
CompressAttribute कक्षा बनाएं, और लक्ष्य कार्रवाई सेट करें।

+1

केवल तभी जब सब कुछ विफल हो जाता है? आईआईएस 7 + बेहतर काम नहीं करना चाहिए? –

+0

यह एक अच्छा समाधान है क्योंकि आप कैश और संपीड़ित कर सकते हैं जबकि आईआईएस केवल –

+0

को कैश या संपीड़ित करेगा। यह एक अच्छा तरीका है कि छोटे संदेशों को संपीड़ित करने के लिए कंप्रेसर/डिकंप्रेस में अधिक लागत हो सकती है, जो डेटा के वेनिला ट्रांसमिशन में होते हैं। किसी एप्लिकेशन में सभी JSON डाउनलोड के लिए gzip सेट करने से वास्तव में इन छोटे संदेशों के लिए समय लग सकता है, इसलिए सजावट केवल बड़े (आर) डाउनलोडों के फायदे हैं। –

14

Use this guide

इन उत्तरों में से कोई भी मेरे लिए काम किया। मैंने एप्लिकेशन/जेसन का ध्यान रखा; charset = utf-8 माइम-प्रकार हालांकि।

+1

+1 करने के लिए एक रीसायकल करने के लिए मत भूलना: यह मेरे लिए काम किया, 'आवेदन/json उपयोग करते हुए; charset = utf-8' माइम-प्रकार: ओ) – Andrew

+0

यह मेरे लिए काम करता है के साथ साथ आप सर्वर न सिर्फ वेबसाइट को पुनः आरंभ करने के लिए याद करने की जरूरत है। उपयोग कि पुनः आरंभ और न कि व्यक्तिगत वेबसाइट पुनः आरंभ - यानी शुरू करने के बाद '' Server' खंड प्रबंधित करने का अधिकार अपने सर्वर नाम और सिर पर क्लिक करें inetmgr' – wal

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