IE 11 + SignalR 不工作
將 signalR 與 IE 11 一起使用時會發生奇怪的行為。場景:
我們有一些調度器類型的功能,調度器執行一些操作,而其他使用者可以實時查看更新(查詢)。發送的參數很好,並導致 IE 客戶端更新,而無需打開開發者控制台。
但是一種不起作用的方法(
performUpdate-獲取查詢結果-這是伺服器>客戶端呼叫,而不是客戶端>伺服器>客戶端)-永遠不會被呼叫。只有在開發人員控制台打開時才會呼叫它。這是我嘗試過的:
為什麼 JavaScript 只有在 IE 中打開開發者工具一次後才能工作?
SignalR:在 IE9 下,客戶端無法接收到消息,直到我按下 F12 !!!
SignalR 客戶端在 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 和最終解決方案
眼睛佈滿血絲,我意識到我遺漏了這個問題的一個關鍵部分:我們在這個頁面上也使用了 angular。我想我已經盯著它太久了,把它漏掉了——對不起。我授予 JDupont 答案是因為他走在了正確的軌道上:記憶體。但不是 jQuery 的 ajax 記憶體,angulars $http。
就這樣沒有其他人不得不花費數天/夜的時間將頭撞在桌子上,最終的解決方案是使用 angulars $http 禁用 ajax 呼叫的記憶體。
取自這裡:
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'; }]);
我過去在 IE 中經歷過類似的行為。我可能知道您的問題的解決方案。
IE 預設記憶體一些 ajax 請求。您可能想嘗試在全域範圍內關閉此功能。看看這個:如何防止 IE 使用 jQuery 記憶體 Ajax
基本上你會像這樣全域關閉它:
$.ajaxSetup({ cache: false });或者對於像這樣的特定 ajax 請求:
$.ajax({ cache: false, //other options... });我的 GET 請求記憶體也有類似的問題。除非開發工具打開,否則我的更新功能只會觸發一次。當它打開時,不會發生記憶體。