2012-12-10 7 views
5

में जीज़िप के साथ जेसन HTTP-संपीड़न ठीक है, मैं इसके बारे में घंटों के लिए पढ़ रहा हूं। एसओ पोस्ट और ब्लॉग आदि के दर्जनों, कोई जवाब नहीं मिला।आईआईएस 8

लक्ष्य: मेरी डब्ल्यूसीएफ सेवा से जेसन प्रतिक्रिया के गतिशील http संपीड़न को सक्षम करें।

नोट: gzip पहले से ही स्थिर सामग्री के लिए और गतिशील सामग्री के लिए काम करता है जब ApplicationHost.config निम्नलिखित शामिल हैं:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> 
      <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; charset=utf-8" enabled="true" /> 
      <add mimeType="*/*" enabled="false" /> 
     </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="*/*" enabled="false" /> 
     </staticTypes>  
</httpCompression> 
</system.webServer> 
दुर्भाग्य से सर्वर पर

मैं निम्नलिखित लाइन का उपयोग कर रहा ApplicationHost.config से लापता है:

<add mimeType="application/json; charset=utf-8" enabled="true" /> 

और क्योंकि सर्वर ने कोई एडब्ल्यूएस EC2 उदाहरण लचीला बीनस्टॉक द्वारा शुरू की (जैसे मैं इसे एक उदाहरण पर बदल सकता है लेकिन नहीं सभी उदाहरणों जब भी वे चलाए जाते हैं पर) है मैं इसे स्वयं नहीं जोड़ सकते।

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> 

इसका मतलब है कि मैं अपने एप्लिकेशन की web.config में httpCompression खंड ओवरराइड नहीं कर सकते:

इसके अलावा दुर्भाग्य से, ApplicationHost.config इस लाइन भी शामिल है।

मेरा प्रश्न: क्या गतिशील सामग्री के gzip संपीड़न को सक्षम करने के लिए अन्य दृष्टिकोण हैं जिन्हें मुझे आजमाया जाना चाहिए?

अगर ओवरराइडमोडडिफॉल्ट = "अनुमति दें" तो क्या मैं अपने ऐप के web.config में httpCompression अनुभाग डाल सकता हूं और इसे ओवरराइड करने की अपेक्षा करता हूं?

यदि आवश्यक हो तो और स्पष्टीकरण जोड़ने में खुशी है।

चीयर्स

+0

मैं भी इसी समस्या का हल ढूंढ रहा हूं। –

+0

डुप्लिकेट ... http://stackoverflow.com/questions/4584956/compressing-a-web-service-response-for-jquery http://stackoverflow.com/questions/10795165/iis-7-5 -not-compressing-json-when-set-in-application-web-config – ncubica

+0

आप अपनी समस्या का समाधान कैसे करते हैं ?? – ncubica

उत्तर

0

पार्टी यहाँ करने के लिए देर हो चुकी है, लेकिन इस एक एएमआई बिना निश्चित रूप से संभव है।

अपनी सेटअप फ़ाइल होस्ट करने के लिए एक s3 बाल्टी बनाएं। इस उदाहरण में मेरे पास mys3bucket नामक एक बाल्टी है। निम्न फ़ाइल को mybucket/ebExtensions/setup.ps1

के तहत बाल्टी में अपलोड करें इस फ़ाइल ने रूट एप्लिकेशन होस्ट कॉन्फ़िगरेशन को संशोधित किया है।

write-host "Applying IIS configuration ..." 

$globalConfig = "C:\Windows\System32\inetsrv\config\applicationHost.config" 

$xmlDoc = new-object System.Xml.XmlDocument 

$xmlDoc.Load($globalConfig) 

#Set minimum compression size 
write-host "Setting minimum compression size ..." 
$xmlCurrentNode = $xmlDoc.SelectSingleNode("/configuration/system.webServer/httpCompression") 
if ($xmlCurrentNode -eq $null) 
{ 
    $xmlCurrentNode = $xmlDoc.CreateElement("httpCompression") 
    $xmlDoc.SelectSingleNode("/configuration/system.webServer").AppendChild($xmlCurrentNode) 
} 
$xmlCurrentNode.SetAttribute("minFileSizeForComp", "10240") 
$xmlCurrentNode.SetAttribute("dynamicCompressionEnableCpuUsage", "70") 
write-host "Done." 

#Enable dynamic compression 
write-host "Enabling dynamic compression ..." 
$xmlCurrentNode = $xmlDoc.SelectSingleNode("/configuration/system.webServer/urlCompression") 
if ($xmlCurrentNode -eq $null) 
{ 
    $xmlCurrentNode = $xmlDoc.CreateElement("urlCompression") 
    $xmlDoc.SelectSingleNode("/configuration/system.webServer").AppendChild($xmlCurrentNode) 
} 
$xmlCurrentNode.SetAttribute("doDynamicCompression", "true") 
write-host "Done." 

#Add dynamic types for compression 
write-host "Adding dynamic types ..." 
$xmlCurrentNode = $xmlDoc.SelectSingleNode("/configuration/system.webServer/httpCompression/dynamicTypes") 
if ($xmlCurrentNode -eq $null) 
{ 
    $xmlCurrentNode = $xmlDoc.CreateElement("dynamicTypes") 
    $xmlDoc.SelectSingleNode("/configuration/system.webServer/httpCompression").AppendChild($xmlCurrentNode) 
} 
$xmlCurrentNode = $xmlDoc.SelectSingleNode("/configuration/system.webServer/httpCompression/dynamicTypes/add[@mimeType='application/*']") 
if ($xmlCurrentNode -eq $null) 
{ 
    $xmlCurrentNode = $xmlDoc.CreateElement("add") 
    $xmlCurrentNode.SetAttribute("mimeType", "application/*") 
    $xmlDoc.SelectSingleNode("/configuration/system.webServer/httpCompression/dynamicTypes").AppendChild($xmlCurrentNode) 
} 
$xmlCurrentNode.SetAttribute("enabled", "true") 
write-host "Done." 

write-host "Saving the target config file ..." 
$xmlDoc.Save("$globalConfig") 
write-host "Done." 

अगला आपको अपनी परियोजना में elastic beanstalk extensions का उपयोग करने की आवश्यकता है।

अपनी वेबसाइट की रूट से .ebextensions फ़ोल्डर में निम्न init.config फ़ाइल जोड़ें। यह एक वाईएएमएल फ़ाइल है इसलिए अंतरिक्ष इंडेंटेशन टैब का उपयोग न करें।

files: 
    "c:/cfn/init.ps1": 
    content: | 
     $instanceDoc = Invoke-RestMethod 'http://169.254.169.254/latest/dynamic/instance-identity/document' 
     $extPath = "c:\cfn\.ebextensions" 
     if (Test-Path $extPath) { 
      Remove-Item $extPath -Recurse 
     } 
     Read-S3Object -BucketName "mys3bucket" -Folder $extPath -KeyPrefix '/ebExtensions' -Region ($instanceDoc.region) 
     . (Join-Path $extPath -ChildPath '\setup.ps1') 
container_commands: 
    00-invoke-init: 
    command: powershell.exe -nologo -noprofile -file "c:\cfn\init.ps1" 

सुनिश्चित करें कि आपके उदाहरण एक भूमिका के माध्यम से बाल्टी करने की अनुमति है, अन्यथा कॉल में AWS क्रेडेंशियल पारित करने के लिए पढ़ने के लिए S3Object

ऊपर करता है निम्नलिखित

  • पर फ़ाइलें लोचदार बीनस्टॉक घटना init.ps1 नामक एक नई फ़ाइल को c: \ cfn \ init.ps1
  • कमांड ईवेंट के दौरान init.ps1 फ़ाइल निष्पादित की जाएगी।
  • इनिट।ps1 फ़ाइल S3 से सेटअप फ़ाइल डाउनलोड करती है और इसे निष्पादित करती है। (ध्यान दें कि आप सभी पावरहेल इनलाइन डाल सकते हैं लेकिन यह वाईएएमएल को साफ रखता है और आगे बढ़ने के दौरान कई फाइलों का उपयोग करना आसान बनाता है।)