मैं अपनी आरईएसटी सेवा (डब्ल्यूसीएफ/वेब एचटीपी बाइंडिंग का उपयोग करके निर्मित) का विस्तार करने की कोशिश कर रहा हूं ताकि ग्राहक gzipped डेटा अपलोड कर सकें। मुझे यकीन नहीं है कि इसे पूरा करने का सबसे अच्छा तरीका क्या है लेकिन मैंने सोचा था कि एक HTTP मॉड्यूल जोड़कर यह काफी आसान होगा जो डेटा को डिक्रॉप करेगा यदि आने वाले अनुरोध के लिए सामग्री-एन्कोडिंग gzip पर सेट है।क्या मैं एक HTTP मॉड्यूल का उपयोग कर आने वाले HTTP अनुरोध की सामग्री को बदल सकता हूं?
तो मैं एक वर्ग निम्नलिखित कार्यान्वयन के साथ IHttpModule से पाने बनाया:
private void OnBeginRequest(object sender, EventArgs e)
{
var app = (HttpApplication) sender;
var context = app.Context;
var contentEncoding = context.Request.Headers["Content-Encoding"];
if (contentEncoding == "gzip")
{
// some debug code:
var decompressedStream = new GZipStream(context.Request.InputStream, CompressionMode.Decompress);
var memoryStream = new MemoryStream();
decompressedStream.CopyTo(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
var streamReader = new StreamReader(memoryStream);
string msg = streamReader.ReadToEnd();
context.Request.InputStream.Seek(0, SeekOrigin.Begin);
app.Request.Filter = //new TestFilterStream(app.Request.Filter);
new System.IO.Compression.GZipStream(
app.Request.Filter, CompressionMode.Decompress);
}
}
मुद्दा मैं देख रहा हूँ कि GZipStream विसंपीड़न वास्तव में प्रदर्शन किया कभी नहीं रहा है। मैंने पुष्टि की है कि आने वाला डेटा वास्तव में gzip'd है (msg-variable में उचित डेटा है)। मैंने उपरोक्त अपनी स्ट्रीम क्लास (टेस्टफिल्टरस्ट्रीम) बनाने की कोशिश की है और ऐप को असाइन किया है। रिवेस्ट.फिल्टर और मैंने पुष्टि की है कि धारा वर्ग पर कोई भी सदस्य वास्तव में एएसपी.NET द्वारा नहीं बुलाया जाता है। तो ऐसा लगता है कि फ़िल्टर निर्दिष्ट करना संभव है, उस फ़िल्टर का वास्तव में उपयोग नहीं किया जाता है।
HttpAplication.Request.Filter वास्तव में उपयोग नहीं किया जाता है?
क्या आपने अपने अन्य डीबग कोड के बिना 'Request.Filter' सेट करने का प्रयास किया है? ऐसा हो सकता है कि आप पहले ही अनुरोध स्ट्रीम पढ़ चुके हैं, इसलिए यह उसके बाद फ़िल्टर को लागू नहीं करेगा। –
मेरा मानना है कि अनुरोध करने का कोई कारण नहीं है। Request.InputStream तलाश योग्य है। यह शायद नहीं है। अपने डीबग कोड को हटाने का प्रयास करें, वैसे भी यह गलत है (आपको स्मृति स्ट्रीम में कुछ भी लिखने से पहले डिकंप्रेस्डस्ट्रीम को बंद/फ्लश करना पड़ सकता है)। – Luaan
कृपया समस्या को कम करें, क्योंकि यह आपके प्रश्न से स्पष्ट नहीं है जहां वास्तविक त्रुटि होती है और कब। क्या समस्या वास्तव में है कि 'जीजेपीस्ट्रीम' अंतर्निहित धारा नहीं पढ़ता है? 'ContentEncoding 'euqual' gzip "' है, क्या 'if' ब्लॉक में कोड कॉल किया जाता है? क्या आपने इस विधि को बुलाए जाने के पल को लॉग करने का प्रयास किया है? क्या आप भी सुनिश्चित हैं कि आपका मॉड्यूल लोड हो जाए? – CodeCaster