2012-03-29 7 views
6

मेरे पास एक एपीकंट्रोलर (एएसपी.Net वेब एपीआई) के भीतर कुछ कोड चल रहा है जो स्वयं एक और वेब सेवा के लिए एक जीईटी अनुरोध करना चाहता है। वेब सेवा (मेरे ऐप का भी हिस्सा) कैश-कंट्रोल हेडर देता है जो सामग्री लौटने के लिए समाप्ति समय का संकेत देती है।आईआईएस के भीतर चल रहे कोड से WebRequest.CachePolicy काम करना चाहिए?

मैं नए System.Net.Http.HttpClient, ताकि क्लाइंट-साइड संचय का उपयोग करने के एक WebRequestHandler के साथ विन्यस्त उपयोग कर रहा हूँ (डिफ़ॉल्ट HttpClientHandler कैश विन्यास का समर्थन नहीं करता है, हालांकि यह उसके अंतर्निहित HTTP कार्यान्वयन के रूप में System.Net.WebRequest का उपयोग करता है):

var client = new HttpClient(new WebRequestHandler { 
    UseDefaultCredentials = true, 
    CachePolicy = new RequestCachePolicy(RequestCacheLevel.Default) 
}); 
var response = client.GetAsync("someUri").Result; 
response.EnsureSuccessStatusCode(); 

सर्वर मैं के माध्यम से मेरी नियंत्रक कार्रवाई के भीतर कैशिंग सक्षम करने कर रहा हूँ पर ...

var response = new HttpResponseMessage(HttpStatusCode.OK); 
response.Headers.CacheControl = new CacheControlHeaderValue { 
    Public = true, 
    MaxAge = new TimeSpan(0, 5, 0); // Five minutes in this case 
}; 

// Omitted, some content is added to the response 
return response; 

ऊपर (संक्षिप्त) कोड सही तरीके से एक परीक्षण के भीतर काम करता है; मैं इस तरह से सेवा के लिए कई कॉल करता हूं और केवल पहला कॉल वास्तव में सेवा से संपर्क करता है (आईआईएस में सेवा पर लॉग संदेशों के माध्यम से मनाया जाता है); बाद की कॉल कैश का उपयोग करें।

हालांकि, आईआईएस खुद पर होस्ट एक ही कोड चल रहा है, यह (मैं अपने आईओसी कंटेनर ऐसी है कि HttpClient उसमें केवल एक ही AppDomain में मौजूद है की स्थापना की है) लगता है HttpClient कैशिंग परिणाम पर ध्यान नहीं देता और प्रत्येक सेवा कॉल पहर। यह AppPoolIdentity के रूप में चल रहा है।

दिलचस्प बात यह है कि यदि मैं ऐप पूल को नेटवर्क सेवा के रूप में चलाने के लिए बदलता हूं, तो प्रतिक्रिया में स्थिति कोड 401 अनधिकृत है (मैंने को WebRequestHandler पर सेट करने का प्रयास किया है लेकिन स्थिति कोड अभी भी 401 है)। वही सच है यदि मैं अपने स्वयं के प्रमाण-पत्रों के तहत चलाने के लिए ऐप पूल बदलता हूं।

तो, नेटवर्क सेवा पहचान के तहत ऐप पूल चलाने और वर्चुअल ऐपपूल इडेंटिटी के बारे में कुछ ऐसा है, जो उन्हें क्लाइंट-साइड कैशिंग का उपयोग करने से रोकता है। WebRequest द्वारा कैश की गई सामग्री भौतिक रूप से मौजूद है?

+0

से निम्न समर्थन लेख आप कभी भी अपना समस्या बेचा था की जाँच करें? मेरे पास भी बिलकुल ऐसा ही मुद्दा है। – Chad

+0

नोप ने समस्या का समाधान नहीं किया, इसके समाधान के लिए मेरे समाधान को पुन: व्यवस्थित किया। –

उत्तर

0

मुझे कोई कारण नहीं दिख रहा है कि कैश को आईआईएस के तहत क्यों काम नहीं करना चाहिए। कैश WinINetProxy द्वारा कार्यान्वित किया गया है और यह वही कैश है जिसका उपयोग इंटरनेट एक्सप्लोरर द्वारा किया जाता है।

समाप्ति समय के बजाय अधिकतम आयु निर्धारित करने का प्रयास करें।

+0

मैं वास्तव में अधिकतम आयु निर्धारित कर रहा हूं; ऊपर अपना उदाहरण अपडेट किया है। –

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