2012-07-23 4 views
21

इसलिए मैं अपने ऐप को गतिशील संपीड़न और gzip का उपयोग करके अपने JSON प्रतिक्रिया भेजने के लिए प्राप्त करने का प्रयास कर रहा हूं। दुर्भाग्य से यह काम नहीं कर रहा है। सर्वर पर सभी स्थिर संपीड़न ठीक काम कर रहा है, लेकिन गतिशील नहीं है।जेएसओएन प्रतिक्रियाओं को भेजने के लिए IIS 7.5 को कॉन्फ़िगर करना, NO_MATCHING_CONTENT_TYPE

मैं जोड़कर इस सेट अप:

<add mimeType="application/json" enabled="true" /> 
<add mimeType="application/json; charset=utf-8" enabled="true" /> 
ApplicationHost.config फ़ाइल में <httpCompression> की <dynamicTypes> अनुभाग के लिए

। मैं HTTP अनुरोधों का निरीक्षण करने के लिए चार्ल्स का उपयोग कर रहा हूं और मैं सत्यापित कर सकता हूं कि मैं Accept-Encoding: gzip, deflate हेडर सेट के साथ अनुरोध भेज रहा हूं। मैंने Accept: */* और Accept: application/json दोनों के साथ प्रयास किया है। जब यह काम नहीं कर रहा था तो मैंने DYNAMIC_COMPRESSION_NOT_SUCCESS के लिए त्रुटि कोड खोजने के लिए 'विफल अनुरोध' ट्रेस लॉगिंग सक्षम किया, जो NO_MATCHING_CONTENT_TYPE था।

मैं फ़ोरम और Google पर शोध करने की कोशिश कर रहा हूं, लेकिन मैं देख सकता हूं कि लोगों को यह बताते हुए कि वर्णमाला के साथ माइम टाइप का उपयोग करना उनके लिए समस्या को हल करता है, लेकिन मेरे मामले में यह अभी भी काम नहीं कर रहा है और मैं सत्यापित कर सकता हूं प्रतिक्रिया एक हैडर Content-Type: application/json; charset=utf-8

अंतिमबिंदुओं कि सेवा कर JSON प्रतिक्रियाओं मानक नेट ASMX [ScriptService()] वर्ग में और [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] विधि पर साथ एनोटेट WebServices हैं कहने के साथ वापस आता है कि। वे JSON ठीक लौटते हैं, लेकिन मुझे मेरे जीवन के लिए काम करने के लिए गतिशील संपीड़न नहीं मिल सकता है।

इन के बाद से नियमित रूप से वेब के तरीकों के साथ-साथ मैं यह भी कहा हैं:

<add mimeType="text/xml" enabled="true" /> 
<add mimeType="text/xml; charset=utf-8" enabled="true" /> 

एक्सएमएल प्रतिक्रियाओं gzip करने का प्रयास करने के लिए। निराशाजनक बात यह है कि एक ही विधि से जेएसओएन भेजते समय यह संपीड़न काम करता है। इस बिंदु पर मैं एक नुकसान पर दयालु हूँ।

उत्तर

33

आप यह सुनिश्चित करना चाहते हैं कि */* माइम प्रकार आपके द्वारा जोड़े जाने वाले प्रकारों के बाद है। यह भी सुनिश्चित करें कि आपने सर्वर मैनेजर (या OptionalFeatures.exe) का उपयोग कर डायनामिक संपीड़न मॉड्यूल स्थापित किया है

यह कमांड लाइन है जिसका उपयोग मैं एक अच्छा संपीड़न सुनिश्चित करने के लिए करता हूं। (लेकिन सुनिश्चित करें कि आप गतिशील और स्टेटिक संपीड़न मॉड्यूल वास्तव में स्थापित किया है): यह आपके% windir चलाने के बाद

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/serverRuntime /frequentHitThreshold:"1" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/urlCompression /doDynamicCompression:"True" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType='application/json']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType='application/json; charset=utf-8']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType='application/javascript']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType='application/x-javascript']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/x-javascript',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType='application/x-javascript; charset=utf-8']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/x-javascript; charset=utf-8',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType='*/*']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='*/*',enabled='False']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType='application/javascript']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType='application/javascript',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType='application/x-javascript']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType='application/x-javascript',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType='application/x-javascript; charset=utf-8']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType='application/x-javascript; charset=utf-8',enabled='True']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType='*/*']" 
call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType='*/*',enabled='False']" 

call %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /noCompressionForHttp10:"False" /noCompressionForProxies:"False" /minFileSizeForComp:"2700" 

% \ system32 \ inetsrv \ config \ ApplicationHost.config कुछ ऐसा दिखाई देगा (ध्यान दें कि / है नीचे):

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="2700" noCompressionForHttp10="false" 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/json" enabled="true" /> 
     <add mimeType="application/json; charset=utf-8" enabled="true" /> 
     <add mimeType="application/javascript" enabled="true" /> 
     <add mimeType="application/x-javascript" enabled="true" /> 
     <add mimeType="application/x-javascript; charset=utf-8" enabled="true" /> 
     <add mimeType="*/*" enabled="false" /> 
    </dynamicTypes> 
    <staticTypes> 
     <add mimeType="text/*" enabled="true" /> 
     <add mimeType="message/*" enabled="true" /> 
     <add mimeType="application/atom+xml" enabled="true" /> 
     <add mimeType="application/xaml+xml" enabled="true" /> 
     <add mimeType="application/javascript" enabled="true" /> 
     <add mimeType="application/x-javascript" enabled="true" /> 
     <add mimeType="application/x-javascript; charset=utf-8" enabled="true" /> 
     <add mimeType="*/*" enabled="false" /> 
    </staticTypes> 
</httpCompression> 
+0

धन्यवाद, मैंने वास्तव में कुछ समय पहले इसे हल किया था, लेकिन मुझे याद नहीं आया कि मैंने यह कैसे किया और तब से कंपनी छोड़ दी थी जब मैं उस समय था। मुझे विश्वास है कि यह उन आदेशों के साथ एक स्क्रिप्ट का उपयोग कर रहा था और इसे एप्लिकेशन की तैनाती के लिए एमएसबिल्ड परिभाषा में एकीकृत कर रहा था। – Sloloem

+2

मैंने पूरे दिन गुस्से में बिताया क्यों संपीड़न मेरे लिए काम नहीं कर रहा था। किसी कारण से, केवल अपनी स्क्रिप्ट को चलाने से मेरी समस्या हल हो गई है (एपॉस्ट फ़ाइल में इसे सीधे सेट करना नहीं था)। धन्यवाद! – LazyBoy

+0

आपके पास स्थिर और गतिशील दोनों वर्गों में समान एमआईएम प्रकार क्यों हैं? –

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