एक हब के लिए एक SignalR ग्राहक को विकसित करने में कुछ समस्या होने wth asp.net वेबसाइट में होस्ट gzip संपीड़न के साथ सक्षम होना चाहिए। चूंकि हम आईआईएस संपीड़न का उपयोग कर रहे हैं, सिग्नलआर की प्रतिक्रिया भी संपीड़ित हो जाती है, लेकिन, ग्राहक प्रतिक्रिया को समझ नहीं पाता है और हमें क्लाइंट पक्ष पर जेसन पार्सिंग त्रुटि मिलती है।SignalR gzip संपीड़न
SignalR आंतरिक HttpWebRequest
का उपयोग करता है मेकअप http अनुरोध करने के लिए और स्वचालित रूप से HttpWebRequest
AutomaticDecompression
संपत्ति का उपयोग कर प्रतिक्रिया को संपीड़ित विन्यस्त किया जा सकता। इसलिए, अगर किसी भी तरह से मैं अनुरोध करने के लिए सिग्नलआर द्वारा उपयोग की गई HttpWebRequest
ऑब्जेक्ट को पकड़ सकता हूं, तो मैं सक्षम स्वचालित डिकंप्रेशन सक्षम करने में सक्षम होना चाहिए।
मैंने सोचा कि मैं IHttpClient
के अपने कस्टम कार्यान्वयन के साथ HubConnection.Start
प्रदान करके HttpWebRequest
तक पहुँच प्राप्त करने में सक्षम होना चाहिए, IHttpClient.GetAsync
एक prepareRequest
कार्रवाई जो मैंने सोचा था कि मुझे HttpWebRequest
के लिए उपयोग देना चाहिए लेता है, लेकिन, HttpHelper.GetAsync
HttpWebRequest
HttpWebRequestWrapper
साथ लपेटता prepareRequest
और HttpWebRequestWrapper
पर जाने से पहले HttpWebRequest
तक पहुंच प्रदान नहीं करता है।
HttpHelper
कक्षा आंतरिक है इसलिए इसका भी उपयोग नहीं कर सकता है, इसलिए, मुझे बिल्कुल यकीन नहीं है कि सिग्नल के साथ स्वचालित डिकंप्रेशन को कैसे सक्षम किया जाए।
मैं HttpWebRequest
HttpWebRequestWrapper
में खुलासा कर सकता हूं, लेकिन यदि कोई मौजूद है तो एक आसान समाधान पसंद करेंगे। कोई भी तूफान?
मैं SignalR संस्करण का उपयोग कर रहा 0.5.1.10822
मेरे ऑटो विसंपीड़न HttpClient:
public class HttpClientWithAutoDecompression : IHttpClient
{
readonly DefaultHttpClient _httpClient = new DefaultHttpClient();
private readonly DecompressionMethods _decompressionMethods;
public HttpClientWithAutoDecompression(DecompressionMethods decompressionMethods)
{
_decompressionMethods = decompressionMethods;
}
public Task<IResponse> GetAsync(string url, Action<IRequest> prepareRequest)
{
Task<IResponse> task = _httpClient.GetAsync(url,
request =>
{
[ERROR: request is actually HttpRequestWrapper and
does not expose HttpWebRequest]** ]
var httpWebRequest = (HttpWebRequest) request;
httpWebRequest.AutomaticDecompression = _decompressionMethods;
prepareRequest(request);
});
return task.ContinueWith(response =>
{
Log.Debug(this, "Response: {0}", response.Result.ReadAsString());
return response.Result;
});
}
....
}
मैं अब भी gzip संपीड़न सक्षम है और पता चला कि SignalR.Client नहीं Accept-Encoding भेजता है कि एक सर्वर पर देख लिया है। ऐसा प्रतीत होता है कि या तो आपका क्लाइंट गलत तरीके से स्वीकृति-एन्कोडिंग हेडर भेजता है या आपके सेवर को gzip (जो अंतर्निहित आईआईएस संपीड़न नहीं करता) को हर प्रतिक्रिया देता है। क्या आप फिडलर के साथ जांच कर सकते हैं कि क्या हो रहा है? –