2012-05-09 13 views
7

पर बंद हो जाता है मेरे पास एक Asp.Net 4.0 वेबसाइट/नियंत्रण इंटरफ़ेस है जो एक अपडेट पैनल और कुछ बटन का उपयोग करता है। अद्यतन पैनल एक टाइमर को तारित किया जाता है जो प्रत्येक 5 सेकंड निष्पादित करता है, जिससे आंशिक पोस्टबैक होता है। बटन कुछ सेटिंग्स टॉगल और फिर एक फोन के माध्यम से अद्यतन पैनल के एक अद्यतन इस के समान बलों:एएसपी.नेट अजाक्स पोस्टबैक अचानक आईफोन/आईपैड

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm._doPostBack('<%= UpdatePanel.ClientID %>', ''); 
return true; 

साइट आईई/Firefox पर और सफारी मोबाइल उपकरणों (IPhone/iPad) पर ठीक चलता है, लेकिन मोबाइल पर पोस्टबैक को यादृच्छिक रूप से डिवाइस और चुपचाप काम करना बंद कर देता है। मुझे लगता है कि यह को बैटरी सहेजने के साथ करना है और सफारी आंशिक पोस्टबैक को निष्क्रिय होने पर बंद कर देता है। समस्या यह है कि जब उपयोगकर्ता साइट पर वापस आ जाता है तो पोस्टबैक पूरी तरह से बंद हो जाता है और न ही टाइमर और न ही बटन किसी भी पोस्टबैक का कारण बनते हैं। (मैंने इसे सत्यापित करने के लिए सर्वर पर नेटवर्क यातायात की निगरानी की है)। यहां तक ​​कि जब उपयोगकर्ता वेबसाइट को रीफ्रेश नहीं करता है (कई बार) आंशिक पोस्टबैक वापस खेल में आता है। यह सिर्फ सर्वर को डेटा पोस्ट करना बंद कर देता है। फिर अचानक और किसी विशेष कारण के लिए पोस्टबैक फिर से काम करना शुरू कर देता है। डाउनटाइम अक्सर 10 मिनट तक होता है, जो पूरी तरह से मेरी वेबसाइट को इसके उद्देश्य के लिए बेकार करता है।

यह देखते हुए कि पोस्टबैक दोबारा शुरू होने से पहले बहुत समय लगता है मुझे आश्चर्य है कि क्लाइंट साइड या आईआईएस में कोई सेटिंग है या नहीं?

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

मैं इस बारे में वास्तव में उलझन में हूं और "बग" को ट्रिगर करने का कोई तरीका नहीं मिला है, यह कभी-कभी होता है। किसी भी सलाह और सुझावों की बहुत सराहना की जाती है।


अद्यतन:

जोड़ा कुछ त्रुटि हैंडलिंग और मैं (नहीं लगातार) जब पोस्टबैक विफल रहता है निम्न संदेश प्राप्त होता है है:

पेज एक async पोस्टबैक लेकिन ScriptManager प्रदर्शन कर रहा है। SupportParialRendering संपत्ति झूठी पर सेट है। सुनिश्चित करें कि संपत्ति पोस्टबैक के दौरान सही पर सेट है।

ओडिली पर्याप्त है कि यह संपत्ति पहले उदाहरण में डिवाइस के लिए स्पष्ट रूप से सच है, अन्यथा पोस्टबैक कभी काम नहीं करेगा, जो मामला नहीं है।


अद्यतन 2: मिले folloing ब्लॉग पोस्ट browserCap web.config में सेटिंग बदलने की सुझाव दे। इसे अभी आज़माएं वापस रिपोर्ट करेंगे। अन्य सुझाव अभी भी बहुत स्वागत है। ASP.NET 4 BrowserCaps (or: what were they thinking?)

उपर्युक्त पूर्णस्क्रीन मोड में सफारी मोबाइल में जावास्क्रिप्ट को अक्षम करता है (होम स्क्रीन से चल रहा है)। निम्नलिखित लेख इस मुद्दे पर एक फिक्स का सुझाव देते हैं। Gotcha: iPad versus ASP.NET

उत्तर

6

मेरे प्रश्न में "अपडेट 2" के तहत निष्कर्ष इस मुद्दे को हल करते हैं। जाहिरा तौर पर सफारी UserAgents कभी कभी के रूप में निम्न ब्लॉग पोस्ट में पहचान, मोज़िला 0.0 के रूप में पहचाना: ASP.NET 4 BrowserCaps (or: what were they thinking?):

पहले WTF जो .NET ढांचे वास्तव में एक अपवाद फेंकता है तो यह है कि अनुसार किसी ब्राउज़र से एक async पोस्टबैक का पता लगाता है ब्राउज़र कैप्स के लिए async पोस्टबैक का समर्थन नहीं करता है।ऐसा लगता है कि वे सोचते हैं कि वे सबसे अच्छा जानते हैं जो असीम सबबैक के साथ असीम सबबैक के साथ भी सक्षम है ...

अगला डब्ल्यूटीएफ खोजना काफी कठिन था। Safari UserAgents को कभी-कभी मोज़िला 0.0 के रूप में पहचाना जाता है और मैं कभी भी अपवाद से कॉपी की गई UserAgent स्ट्रिंग का उपयोग करते समय भी इस समस्या को पुन: उत्पन्न करने में सक्षम क्यों नहीं था?

जवाब

<browserCaps userAgentCacheKeyLength="64" />

में निहित है उपयोगकर्ता एजेंट कैश कुंजी लंबाई के लिए डिफ़ॉल्ट सेटिंग UserAgent स्ट्रिंग के पहले 64 वर्णों लेने के लिए है। ...

और पृष्ठ में और नीचे:

256 को userAgentCacheKeyLength स्थापना समस्या हल हो, वहां अभी भी वहाँ बाहर UserAgent स्ट्रिंग मोज़िला 0.0 रूप में पहचाने जाते हैं, भले ही। कम से कम अब यह सुसंगत है।

तो, web.config में <browserCaps userAgentCacheKeyLength="256" /> डाल मुद्दे को हल करती है।


यह दुर्भाग्य से एक और समस्या है जब सफारी ब्राउज़र (होम स्क्रीन पर सहेजे गए लिंक) पूर्ण स्क्रीन मोड में प्रयोग किया जाता है का कारण बनता है। पूर्णस्क्रीन मोड में सफारी एक अलग HTTP उपयोगकर्ता एजेंट स्ट्रिंग का उपयोग करता है, और एएसपी.नेट अब ब्राउज़र को सफारी के रूप में नहीं पहचानता है, बल्कि यह इसे एक सामान्य ब्राउज़र के रूप में पहचानता है जिसमें कोई क्षमता नहीं है और उदाहरण के लिए जावास्क्रिप्ट और JQuery काम करना बंद कर देगा। Gotcha: iPad versus ASP.NET में आगे विस्तारित किया गया है। समाधान प्रत्येक वेबसाइट पर पेज_इनिट में निम्नलिखित डालना है। बहुत ही सुरुचिपूर्ण नहीं है, लेकिन यह उपर्युक्त के साथ मिलकर काम करता है:

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    if (Request.UserAgent != null && Request.UserAgent.IndexOf("AppleWebKit", StringComparison.CurrentCultureIgnoreCase) > -1) 
    { 
     this.ClientTarget = "uplevel"; 
    } 
} 
+0

धन्यवाद @Avada केडवरा! क्या यह वही समस्या थी, '<ब्राउज़र कैप्स उपयोगकर्ता एजेन्ट कैशकेलेथेंथ = "256" />' इसे ठीक किया गया। बहुत सराहना की! अभी तक 'पेज_PreInit' अनुभाग में नहीं रखा है, क्या यह सिर्फ मास्टर पेज पर रखा जा सकता है, सभी पृष्ठों के माध्यम से काम करने के लिए कहता है? –

+0

@mcpDESIGNS: मैंने कोशिश नहीं की है लेकिन किसी भी तरह से रुचि रखते हैं जो कम कोड के साथ समाधान कोटर बना सकता है। क्या आपके सुझाव के साथ आपको कोई सफलता मिली है? –

+0

मुझे इसके बारे में कुछ और परीक्षण करना होगा और मैं आपको बता दूंगा! और मेरा मतलब है कि मास्टर पेज पर 'पेज_PreInit' डालने से यह होगा कि आपको इसे प्रत्येक बच्चे पृष्ठ पर कॉपी/पेस्ट करने की आवश्यकता नहीं है। –

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