在IE 11中使用signalR时会发生奇怪的行为.场景:
我们有一些调度程序类型的功能,其中调度程序执行某些操作,而另一个用户可以实时查看更新(查询).发送的参数很好,可以在IE客户端进行更新,而无需打开开发人员控制台.
但是一个不起作用的方法(performUpdate- 获取查询结果 - 这是服务器>客户端调用,而不是客户端>服务器>客户端) - 永远不会被调用.当开发者控制台打开时,它只会得到打电话.
这是我尝试过的:
为什么JavaScript只在IE中打开开发人员工具一次后才有效?
SignalR:在IE9下,客户端无法接收消息,直到我点击F12 !!!!
一些代码片段
调度员方面
在下拉列表更改时,我们获取当前选定的值并通过网络发送更新.(这很好).
$('#Selector').on('change', function(){
var variable = $('#SomeField').val();
...
liveBatchHub.server.updateParameters(variable, ....);
});
Run Code Online (Sandbox Code Playgroud)
服务器端
当调度程序搜索时,我们会有一些服务器端代码发送已运行搜索的通知,并告诉客户端提取结果.
public void Update(string userId, Guid bId)
{
var context = GlobalHost.ConnectionManager.GetHubContext<LiveBatchViewHub>();
context.Clients.User(userId).performUpdate(bId);
}
Run Code Online (Sandbox Code Playgroud)
客户端(实时更新的查看者)
除非开发者工具是开放的,否则永远不会调用
liveBatchHub.client.performUpdate = function (id) {
//perform update here
update(id);
};
Run Code Online (Sandbox Code Playgroud)
编辑
一些可能有用的信息(我不确定它为什么会产生影响)但这只会在我做服务器>客户端调用时发生.当调度程序更改搜索参数时,更新是客户端>服务器>客户端或调度程序客户端>服务器>查看器客户端,这似乎有效.单击搜索后,搜索管道中的服务将调用performUpdate服务器端(server> viewer-client).不确定这是否重要?
编辑2和最终解决方案
眼睛充血,我意识到我遗漏了这个问题的一个关键部分:我们在这个页面上也使用了角度.猜猜我已经盯着它看了太久而把它留了出去 - 抱歉.我给了JDupont答案,因为他在正确的轨道上:缓存.但不是jQuery的ajax缓存,角度$ http.
就这样,没有人不得不花费数天/晚的时间将头撞在桌子上,最终的解决方案是禁用使用angulars $ http的ajax调用缓存.
取自这里:
myModule.config(['$httpProvider', function($httpProvider) {
//initialize get if not there …Run Code Online (Sandbox Code Playgroud) SignalR适用于Windows桌面应用程序(winforms/wpf)吗?
使用SignalR与Windows桌面应用程序有什么优缺点?
有任何性能考虑因素吗?
我想在服务器和许多客户端之间建立实时连接.连接将是不变的.
我理解为什么SignalR不允许你访问HttpContext.但是,这对我们来说是个问题.让我解释:
我们的应用程序是一个多租户应用程序,用户在登录时选择环境.这基本上在HttpSession中注册了ConnectionStringName.在我们的SignalR Hub中,我们需要访问数据库Disconnect.但这是不可能的,因为此时我们没有HttpContext,无法确定要写入的环境.
任何人都可以向我们提出如何解决这个问题的建议吗?我们有点卡在这一点上.
编辑:如果您的解决方案在负载平衡环境中工作,则为奖励积分.
我Connect()在IConnected接口上实现该方法以向正确的组添加新连接.除了一件事之外,这很有效:为了将用户添加到正确的组,我需要发送一个值以在此方法中读取.我尝试将属性添加到客户端集线器:
var uIHub = $.connection.uIHub;
uIHub.SessionType = "Edit";
Run Code Online (Sandbox Code Playgroud)
但是这个Connect方法无法访问:
if (string.IsNullOrEmpty(Caller.SessionType) || Caller.SessionType == "Edit") {
sessionId = WAFContext.EditSession.SessionId.ToString();
} else {
sessionId = WAFContext.ViewSession.SessionId.ToString();
}
Groups.Add(Context.ConnectionId, sessionId);
Run Code Online (Sandbox Code Playgroud)
Caller.SessionType 永远是空的.
关于如何解决这个问题的任何建议?
除了阅读github中的代码之外,是否有关于SignalR.Redis包如何工作的白皮书类型的文档?具体来说,我想知道它为Redis添加了哪些键,更新/删除策略等.当我在Redis中查看时,我看到的是下一个调用中指定的一个键(即"SignalR.Redis.Sample"):
GlobalHost.DependencyResolver.UseRedis(server, Int32.Parse(port), password, "SignalR.Redis.Sample");
Run Code Online (Sandbox Code Playgroud)
这把钥匙似乎只是雷迪斯的一个柜台.我假设正在创建其他密钥并快速删除,以方便连接到Redis的每个应用服务器之间的消息.
我正在使用SignalR Wiki Getting Started Hubs页面中的示例聊天应用程序.我已经扩展它以添加组支持,它工作正常.
但是,现在我想从外部控制台应用程序向组发送消息.这是我的控制台应用程序的代码,下面是我的代码组.如何从代理向组发送消息?可能吗?
// Console App
using System;
using Microsoft.AspNet.SignalR.Client.Hubs;
namespace SignalrNetClient
{
class Program
{
static void Main(string[] args)
{
// Connect to the service
var connection = new HubConnection("http://localhost:50116");
var chatHub = connection.CreateHubProxy("Chat");
// Print the message when it comes in
connection.Received += data => Console.WriteLine(data);
// Start the connection
connection.Start().Wait();
chatHub.Invoke("Send", "Hey there!");
string line = null;
while ((line = Console.ReadLine()) != null)
{
// Send a message to the server
connection.Send(line).Wait();
}
} …Run Code Online (Sandbox Code Playgroud) 例如,有一些NancyFX与SignalR集成的例子
由于我刚刚开始,我想要一个简单,工作良好的规范示例,我可以从中工作.来自微软的聊天示例的nancy版本可以正常运行.
谢谢
有没有办法做到这一点?
我有swashbuckle为我的其他API生成内容但我不相信它适用于SignalR.
@aspnet/signalr 与 @microsoft/signalr javascript 库之间有什么区别?
两者似乎都对 DotNetCore SignalR 有效,两者似乎都很活跃。在一些教程中,我找到了 @aspnet/signalr,而在 DotNet 文档中,他们使用了 @microsoft/signalr。
有 2 个不同的 Microsoft 官方库似乎有点奇怪,但找不到任何关于不同之处的解释
我们有一个使用SignalR作为其通知机制的Web应用程序.问题是当我们使用IE浏览我们的Web应用程序时,SignalR使用Long Polling作为其传输类型,因此将请求发送回我们的Web服务器,因此Session永远不会过期,无论多长时间浏览器空闲.
我们在想,也许我们可以在Global.asax中捕获请求并查看它们是否来自SingalR并将会话超时设置为剩余时间(我不认为这是一个简单的解决方案).
我们缺少其他任何解决方案吗?
signalr ×10
asp.net ×3
c# ×3
.net ×1
asp.net-mvc ×1
iis ×1
javascript ×1
long-polling ×1
nancy ×1
redis ×1
session ×1
signalr-hub ×1
swashbuckle ×1
winforms ×1
wpf ×1