asp.net mvc - आईई 11+सिग्नल काम नहीं कर रहा है




asp.net-mvc internet-explorer (2)

मैंने अतीत में आईई में इसी तरह के व्यवहार का अनुभव किया है। मैं आपकी समस्या के समाधान के बारे में जान सकता हूं।

आईई डिफ़ॉल्ट रूप से कुछ AJAX अनुरोध कैश करता है। आप वैश्विक स्तर पर इसे बंद करने का प्रयास करना चाह सकते हैं। इसे देखें: आईई को jQuery के साथ अजाक्स कैशिंग से कैसे रोकें

असल में आप वैश्विक रूप से इसे इस तरह से बंद कर देंगे:

$.ajaxSetup({ cache: false });

या इस तरह के एक विशिष्ट AJAX अनुरोध के लिए:

$.ajax({
  cache: false,
  //other options...
});

मेरे जीईटी अनुरोध कैशिंग के साथ मुझे एक ही समस्या थी। मेरा अपडेट फ़ंक्शन केवल तब तक आग लग जाएगा जब तक कि देव उपकरण खुले न हों। जब यह खुला था, तो कोई कैशिंग नहीं होगी।

IE के साथ सिग्नलआर का उपयोग करते समय अजीब व्यवहार हो रहा है 11. परिदृश्य:

हमारे पास कुछ प्रेषक प्रकार की कार्यक्षमता है जहां प्रेषक कुछ क्रियाएं करता है, और अन्य उपयोगकर्ता अद्यतन (क्वेरीिंग) अपडेट देख सकते हैं। भेजे गए पैरामीटर ठीक से आते हैं और आईई क्लाइंट साइड पर डेवलपर कंसोल खोलने के बिना अपडेट का कारण बनते हैं।

लेकिन एक विधि जो काम नहीं करती है ( performUpdate - क्वेरी परिणाम प्राप्त करने के लिए - यह एक सर्वर> क्लाइंट कॉल है, क्लाइंट> सर्वर> क्लाइंट नहीं) - कभी भी कॉल नहीं किया जाता है। जब डेवलपर कंसोल खुला होता है तो इसे केवल कॉल किया जाता है।

मैंने जो कोशिश की है वह यहां है:

जावास्क्रिप्ट केवल आईई में डेवलपर टूल्स खोलने के बाद ही काम करता है?

सिग्नलआर: आईई 9 के तहत, क्लाइंट द्वारा संदेश प्राप्त नहीं किए जा सकते हैं जब तक कि मैं F12 दबाता हूं !!!!

सिग्नलआर क्लाइंट AngularJs नियंत्रक के अंदर काम नहीं करता है

कुछ कोड स्निपेट्स

डिस्पैचर पक्ष

ड्रॉपडाउन परिवर्तन पर, हमें वर्तमान में चयनित मूल्य मिलते हैं और तार में अपडेट भेजते हैं। (यह ठीक काम करता है)।

$('#Selector').on('change', function(){
   var variable = $('#SomeField').val();
   ...
   liveBatchHub.server.updateParameters(variable, ....);
});

सर्वर साइड

जब प्रेषक खोज करता है, तो हमारे पास कुछ सर्वर साइड कोड होता है जो अधिसूचनाएं भेजता है कि एक खोज चल रही है, और क्लाइंट को परिणाम खींचने के लिए कहने के लिए।

public void Update(string userId, Guid bId)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<LiveBatchViewHub>();
            context.Clients.User(userId).performUpdate(bId);
        }

ग्राहक पक्ष (लाइव अपडेट के दर्शक)

यह तब तक नहीं बुलाया जाता जब तक कि डेवलपर टूल खुला न हो

liveBatchHub.client.performUpdate = function (id) {
                    //perform update here
                    update(id);
                };

संपादित करें

एक और अधिक जानकारी जो उपयोगी हो सकती है (मुझे यकीन नहीं है कि यह एक फर्क क्यों पड़ता है) लेकिन ऐसा लगता है कि जब मैं सर्वर> क्लाइंट कॉल कर रहा हूं। जब प्रेषक खोज पैरामीटर बदल रहा है, तो अद्यतन क्लाइंट> सर्वर> क्लाइंट या प्रेषक-क्लाइंट> सर्वर> दर्शक-क्लाइंट है, जो काम करता है। खोज पर क्लिक करने के बाद, खोज पाइपलाइन में एक सेवा performUpdate सर्वर पक्ष (सर्वर> दर्शक-क्लाइंट) को कॉल करती है। यकीन नहीं है कि यह मायने रखता है?

2 और अंतिम समाधान संपादित करें

आंखें खून की धड़कन, मुझे एहसास हुआ कि मैंने इस सवाल के लिए एक महत्वपूर्ण हिस्सा छोड़ा: हम इस पृष्ठ पर कोणीय का भी उपयोग कर रहे हैं। मान लीजिए कि मैं बहुत लंबे समय से घूर रहा हूं और इसे छोड़ दिया - माफ करना। मैंने जेडुपॉन्ट को जवाब दिया क्योंकि वह सही रास्ते पर था: कैशिंग। लेकिन jQuery की AJAX कैशिंग नहीं, कोणीय $ http।

बस इसलिए किसी और को डेस्क के खिलाफ अपने सिर को टक्कर मारने के लिए दिन / रात बिताना नहीं पड़ता है, अंतिम समाधान एंजेल कॉल पर एंजेल कॉल पर कैशिंग को अक्षम करना था।

here से लिया गया:

myModule.config(['$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.get = {};    
    }    

    // Answer edited to include suggestions from comments
    // because previous version of code introduced browser-related errors

    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
    // extra
    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);

यदि आपका कोड अन्य ब्राउज़रों के साथ ठीक से काम करता है, तो समस्या सिग्नलआर की प्रयुक्त परिवहन विधि से हो सकती है। वे ब्राउज़र समर्थन के आधार पर वेबसॉकेट , सर्वर भेजे गए ईवेंट , हमेशा के लिए फ्रेम और लंबे मतदान हो सकते हैं

हमेशा के लिए फ्रेम केवल इंटरनेट एक्सप्लोरर के लिए है। आप विभिन्न मामलों में कौन सी परिवहन विधि का उपयोग करेंगे, यह जानने के लिए आप सिग्नलआर का परिचय देख सकते हैं (ध्यान दें कि आप उनमें से किसी भी ब्राउज़र पर उपयोग नहीं कर सकते हैं, उदाहरण के लिए, आईई सर्वर प्रेषित घटनाओं का समर्थन नहीं करता है )।

आप अनुरोध की QueryString को देखकर बस एक हब के अंदर उपयोग की जाने वाली परिवहन विधि को समझ सकते हैं जो लॉगिंग के लिए उपयोगी हो सकता है:

Context.QueryString["transport"];

मुझे लगता है कि यह मुद्दा आईई द्वारा हमेशा के लिए फ्रेम का उपयोग करने से आता है, क्योंकि कभी-कभी यह सिग्नलआर को अजाक्स कॉल पर क्रैश करने का कारण बनता है। आप सिग्नलआर में हमेशा के लिए फ़्रेम समर्थन को हटाने का प्रयास कर सकते हैं और ब्राउज़र द्वारा शेष कोड के साथ ब्राउज़र द्वारा शेष समर्थित विधियों का उपयोग करने के लिए मजबूर कर सकते हैं:

$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });

मैंने सिग्नलआर के बारे में कुछ वास्तविकताओं को दिखाया और आपको अपनी समस्या का समाधान करने के लिए कुछ लॉगिंग / ट्रेस टूल दिए। अधिक सहायता के लिए, अतिरिक्त विवरण डालें :)

अपडेट करें : चूंकि आपकी समस्या बहुत अजीब लगती है और मेरे पास आपके कोड के आस-पास पर्याप्त दृष्टि नहीं है, इसलिए मैं आपके अनुभव के आधार पर कुछ निर्देशों का प्रस्ताव करता हूं जो उपयोगी होने की इच्छा रखते हैं:

  1. उपयुक्त आईडीई में सेटअप ब्राउज़र लिंक
  2. इसकी प्रक्रिया के दौरान नेटवर्क टैब अनुरोध / प्रतिक्रिया डेटा चेकआउट करें
  3. सुनिश्चित करें कि आपने अपने सर्वर / क्लाइंट साइड में आरक्षित नामों का उपयोग नहीं किया है (शायद विधियों और चर का नाम बदलकर)

मुझे लगता है कि आपको liveBatchHub.server.update(variable, ....); का उपयोग करने की आवश्यकता है liveBatchHub.server.update(variable, ....); liveBatchHub.server.updateParameters(variable, ....); बजाय liveBatchHub.server.updateParameters(variable, ....); सर्वर कॉल करने के लिए डिस्पैचर पक्ष में, क्योंकि सर्वर के बाद आपको सर्वर विधि नाम का उपयोग करना चाहिए।





signalr