IE 11 + SignalR not working

Jack

Strange behavior is happening when using signalR with IE 11. Scenario:

We have some dispatcher type functionality where the dispatcher does some actions, and the other user can see updates live (querying). The parameters that are sent come through fine and cause updates on the IE client side without having to open the developer console.

BUT the one method that does not work (performUpdate - to get the query results - this is a server > client call, not client > server > client) - never gets called. IT ONLY GETS CALLED WHEN THE DEVELOPER CONSOLE IS OPEN.

Here's what I've tried:

Why JavaScript only works after opening developer tools in IE once?

SignalR : Under IE9, messages can't be received by client until I hit F12 !!!!

SignalR client doesn't work inside AngularJs controller

Some code snippets

Dispatcher side

On dropdown change, we get the currently selected values and send updates across the wire. (This works fine).

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

Server Side

When the dispatcher searches, we have some server side code that sends out notifications that a search has been ran, and to tell the client to pull results.

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

Client side (viewer of live updates)

This never gets called unless developer tools is open

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

Edit

A little more information which might be useful (I am not sure why it makes a difference) but this ONLY seems to happen when I am doing server > client calls. When the dispatcher is changing the search parameters, the update is client > server > client or dispatcher-client > server > viewer-client, which seems to work. After they click search, a service in the search pipeline calls the performUpdate server side (server > viewer-client). Not sure if this matters?

Edit 2 & Final Solution

Eyes bloodshot, I realize I left out one key part to this question: we are using angular as well on this page. Guess I've been staring at it too long and left this out - sorry. I awarded JDupont the answer because he was on the right track: caching. But not jQuery's ajax caching, angulars $http.

Just so no one else has to spend days / nights banging their heads against the desk, the final solution was to disable caching on ajax calls using angulars $http.

Taken from 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';
}]);
JDupont

I have experienced similar behavior in IE in the past. I may know of a solution to your problem.

IE caches some ajax requests by default. You may want to try turning this off globally. Check this out: How to prevent IE from caching Ajax with jQuery

Basically you would globally switch this off like this:

$.ajaxSetup({ cache: false });

or for a specific ajax request like this:

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

I had a similar issue with my GET requests caching. My update function would only fire off once unless dev tools was open. When it was open, no caching would occur.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related