asp.net-mvc – IE 11 SignalR不工作

使用signalR与IE 11时发生奇怪的行为。场景:

我们有一些调度器类型的功能,其中调度程序执行一些操作,而另一个用户可以看到更新(查询)。发送的参数可以通过罚款在IE客户端进行更新,而无需打开开发者控制台。

但是一种方法不起作用(performUpdate – 获取查询结果 – 这是一个服务器>客户端调用,而不是客户端>服务器>客户端) – 永远不会被调用。当开发者控制台打开时,它只能被呼叫。

这是我试过的:

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

一些代码片段

调度方

在下拉式更改中,我们获得当前选定的值,并通过电线发送更新。 (这工作正常)。

$('#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&最终解决方

眼睛血腥,我意识到我没有提出这个问题的一个关键部分:我们在这页面上也使用了角度。猜猜我一直在盯着它太久了,让对方遗憾。我给了JDupont答案,因为他在正确的轨道上:缓存。但是没有jQuery的ajax缓存,有角度的$ http。

就这样没有人必须花费几天/几晚的时间将桌面敲响头,最终的解决方案是使用角度$ http禁用ajax调用缓存。

取自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';
}]);

解决方法

过去我在IE中经历过类似的行为。我可能知道你的问题的解决方案。

IE认缓存一些ajax请求。你可能想尝试全球关闭它。检查出来:How to prevent IE from caching Ajax with jQuery

基本上你会全局地切换这样的:

$.ajaxSetup({ cache: false });

或者像这样一个特定的ajax请求:

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

我的GET请求缓存有一个类似的问题。除非开启工具是开放的,否则我的更新功能只会触发一次。当它打开时,不会发生缓存。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...