2011-05-13 18 views
7

पुन: डाउनलोड करने के लिए मजबूर कैसे करें मैं यह पता लगाने की कोशिश कर रहा हूं कि नया संस्करण उपलब्ध होने पर ब्राउज़र को एक .xap फ़ाइल को दोबारा डाउनलोड करने के लिए कैसे मजबूर करना है और फिर भी पुराना अभी भी ब्राउज़र में कैश किया गया है ।सिल्वरलाइट एक्सएपी फ़ाइल

मैं दूसरे धागे देखा है: How do you force Firefox to not cache or re-download a Silverlight XAP file?

सबसे अच्छा समाधान लगता है:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
    this.myApp.Source += "?" + versionNumber; 
} 

हालांकि, मैं this.myApp हिस्सा नहीं मिलता है। वह किस तरह की वस्तु है? मुझे इसे फिर से खोलने के लिए खेद है, लेकिन मेरी इच्छा है कि लोग पूर्ण समाधान पोस्ट करेंगे।

धन्यवाद

उत्तर

8

asp:Silverlight वेब सर्वर नियंत्रण पर आधारित कोड क्या है, लेकिन उस नियंत्रण को सिल्वरलाइट 3 से बंद कर दिया गया था।

अब हम वस्तु ऑब्जेक्ट टैग की प्राथमिकता प्रस्तुत करने के लिए सीधे ऑब्जेक्ट टैग का उपयोग करते हैं या अपने सर्वर नियंत्रण को दस्तक देते हैं।

एक वस्तु टैग के रूप में यह कुछ इस तरह दिखेगा: -

<form id="form1" runat="server" style="height:100%"> 
<div id="silverlightControlHost"> 
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
     <param id="xapSource" runat="server" name="source" value="ClientBin/SilverlightApplication1.xap"/> 
     <param name="onError" value="onSilverlightError" /> 
     <param name="background" value="white" /> 
     <param name="minRuntimeVersion" value="4.0.50303.0" /> 
     <param name="autoUpgrade" value="true" /> 
     <param name="initParams" id="initParams" runat="server" /> 
     <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50303.0" style="text-decoration:none"> 
      <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/> 
     </a> 
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div> 
</form> 

नोट आईडी और runat = स्रोत परम पर "सर्वर"। इसी के साथ जगह में पेज लोड कुछ इस तरह दिखाई दे सकता है: -

protected void Page_Load(object sender, EventArgs e) 
{ 
    string xapPhysicalPath = Server.MapPath(xapSource.Attributes["value"]); 
    DateTime lastWrite = System.IO.File.GetLastWriteTime(xapPhysicalPath); 
    xapSource.Attributes["value"] = xapSource.Attributes["value"] + "?" + lastWrite.ToString("yyyyMMddThh:mm:ss"); 

} 

इस स्रोत हमेशा बदल जाएगा जब XAP बदल गया है के लिए इस्तेमाल किया यूआरएल सुनिश्चित करेगी। आपके द्वारा पारित किया गया मूल कोड इस बात से त्रुटिपूर्ण है कि xap के लिए पूरी तरह से असंबद्ध असेंबली संस्करण संख्या के बिना बदलना अभी भी संभव है।

+0

मैं codebehind में "param" ("xapSource" आपके उदाहरण में) तक नहीं पहुंच सकता, इंटेलिजेंस इसे बिल्कुल नहीं देखता है। क्या मुझसे कुछ गलत हो रही है? Design.cs फ़ाइल में ऐसा दिखने वाला क्या है? इसका सटीक प्रकार क्या है? –

+0

ठीक है, मुझे यह काम करने के लिए मिला। परम प्रोग्रामिक रूप से नहीं पहुंचा जा सकता है, इस समाधान का उपयोग करना आवश्यक है: http://geekswithblogs.net/mbcrump/archive/2011/01/06/prevent-your-silverlight-xap-file-from-caching-in-your -browser.aspx –

+0

हाँ आप कुछ गलत कर रहे हैं। यह 'संरक्षित वैश्विक :: सिस्टम.Web.UI.HtmlControls.HtmlGenericControl xapSource;' जैसा दिखना चाहिए। सटीक प्रकार 'System.Web.UI.HtmlControls.HtmlGenericControl' है। – AnthonyWJones

0

MyApp शायद एक वेब नियंत्रण है कि पेज में सिल्वरलाइट वस्तु बना देता है।

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

+0

तकनीकी रूप से कोई कैश अमान्यता नहीं होगी, ब्राउज़र ने पहले कभी यूआरएल नहीं देखा है और इसलिए इसे कैश में नहीं मिलेगा। – AnthonyWJones

+0

सच है। सुधारों के लिए धन्यवाद। –

1

आप वर्तमान डेटाटाइम को एक्सएपी में जोड़ सकते हैं और इसे हर बार नए के रूप में देखा जाएगा, इसलिए क्लाइंट पर कोई कैशिंग नहीं है।

value="ClientBin/SilverlightApplication1.xap?<%=DateTime.Now%>" 

उम्मीद है कि इससे मदद मिलती है।