有没有办法在SignalR中停止轮询服务器?如果发生错误,我想停止轮询服务器.轮询中心是从一开始的$.connection.hub.start(),所以我认为它可能会停止$.connection.hub.stop()或类似的东西.但它似乎不起作用,即使在通话后,民意调查仍在继续stop().还有其他方法可以停止投票吗?
<script type="text/javascript">
var chatHub = $.connection.chatHub;
var connection = $.connection.hub;
chatHub.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
connection.error(function (error) {
$('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
connection.stop(); //This doesn't seem to work
});
connection.start();
</script>
Run Code Online (Sandbox Code Playgroud) 我们遇到了这个指定不同超时属性的链接:https: //github.com/SignalR/SignalR/wiki/Configuring-SignalR
还有一个很好的帖子(什么时候重新连接signalR会出现?)关于SignalR客户端和SignalR服务器之间如何断开连接和重新连接.
只是为了重复上述帖子中的不同情况:
"当客户端脱机然后不久重新获得连接时,就会发生集线器重新连接.SignalR配置值很大程度上决定了以下示例的时间戳,因此不要逐字记录时间.
以下是几个涉及重新连接行为的示例及其结果(时间格式m:ss):
情况1
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - 由于ISP问题,客户端失去连接(并意识到它失去了连接)
0:15 - 客户重获连接
0:16 - 触发OnReconnected事件
情况2
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开连接)
0:15 - 客户重获连接
这里可能发生两件事
答:0:16 - 没有任何反应,客户继续使用之前的连接
B:0:~45 - 客户端实现断开连接*
B:0:46-客户端转换到重新连接状态
B:0:47 - 客户端成功重新连接并触发OnReconnected事件.
情况3
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开连接)
0:~45 - 客户实现其断开连接*
0:46 - 客户端转换到重新连接状态
1:15 - 服务器确定客户端已经消失了太长时间然后忘记它,排队一个"断开连接"命令,让客户端接收它,如果它稍后重新连接.***
1:15 - OnDisconnect以1:16触发 - 客户重新获得连接
1:17 - 客户端进行"软"重新连接(不触发OnReconnected)
1:18 - 客户端检索"disconnect"命令
1:19 - 客户端调用"停止"并进行软断开(不触发OnDisconnected)
情况4
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - …
我似乎与SignalR的JS Client Hub有问题.
问题是'on'处理程序似乎不起作用 - 它不会产生错误,但不会接收服务器发送的任何信号.下面的代码显示了一个提取,我调用服务器(使用调用)工作正常 - 然后在服务器上我回调acceptHubData应该在客户端上获取但不是.
我的目标是当导航到页面时,每个页面将打开与特定集线器的连接,并在用户移动到另一个页面时释放此连接!
编辑:使用以下代码片段工作,但我想知道为什么下面的代码使用'on'事件不起作用!
var superHub = $.connection.mySuperHub;
superHub.client.acceptHubData = function (data) {
$('<li>hello there' + data + '</li>').prependTo($('#ul1'))
}
$.connection.hub.start().done(function () {
$('<li>done phase 1</li>').prependTo($('#ul1'))
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
这是客户端代码(以js为单位)
$(document).ready(function () {
var myHub;
try {
var connection = $.hubConnection();
connection.start().done(function () {
myHub = connection.createHubProxy("mySuperHub");
myHub.on('acceptHubData', function (data) {
alert(data); // THIS IS NOT CALLED!
});
myHub.invoke('AcceptSignal', "hello from the client2");
});
}
catch (e) {
alert(e.message);
}
});
Run Code Online (Sandbox Code Playgroud)
这是服务器代码:
[HubName("mySuperHub")]
public …Run Code Online (Sandbox Code Playgroud) 我是SignalR的新手,我一直在关注Microsoft Academy MVC 4教程.在安装SignalR时,我遇到了障碍.
步骤:创建一个全新的MVC4 Web应用程序(Internet应用程序),Build,转到NuGet包管理器并找到"Microsoft ASP.NET SignalR",按安装.我收到以下错误消息:"无法卸载'Newtonsoft.Json 5.0.8'因为'Microsoft.AspNet.WebApi.Client 4.0.20710.0'取决于它."
如果我第二次尝试,我会收到以下错误:"无法安装软件包'Microsoft.Owin.Security 2.0.1'.您正在尝试将此软件包安装到一个针对'.NETFramework,Version = v4.0'的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件.有关更多信息,请与程序包作者联系.
我已经尝试了所有内置模板.该演示似乎是使用VS2012(我是),所以我不明白这是什么问题.我注意到,当我暂停演示时,他们正在安装v1.1.3,而我的是v2.0.0
我是MVC的新手,是nuget和SignalR的新手.如果有人有任何提示或替代方案,我会很感激.
我有一个使用SignalR的Web API项目,它开始让我"经常无法找到Microsoft.AspNet.Signal.Core"错误,这些错误只能通过在Visual Studio中进行完全重建来解决.
我在Nuget中升级了SignalR和OWIN以尝试修复此问题,但现在我总是得到"尝试加载应用程序时出现以下错误. - 找不到包含OwinStartupAttribute的程序集. - 找不到包含Startup或[AssemblyName]的程序集.Startup类"
我是团队中唯一一个得到此错误的人 - 相同的代码在其他计算机上运行正常.
我有一个启动类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(MyProject.Startup))]
namespace MyProject
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将AppStartup键添加到web.config中:
<add key="owin:appStartup" value="MyProject.Startup, MyProject" />
Run Code Online (Sandbox Code Playgroud)
我在WebApi项目中有以下参考:
Microsoft.AspNet.SignalR.Core (2.1.0.0)
Microsoft.AspNet.SignalR.SystemWeb (2.1.0.0)
Microsoft.Owin (2.0.2.0)
Microsoft.Owin.Host.SystemWeb (2.0.2.0)
Microsoft.Owin.Security (2.0.2.0)
Owin (1.0.0)
Run Code Online (Sandbox Code Playgroud)
我在Windows 8 64Bit上使用IIS 8.5
我有一个在服务器A上运行的ASP.NET MVC应用程序和在服务器B上运行的一些Web服务.我已经实现了我在服务器A上使用SignalR的实时通知.但是现在我需要服务器B也能够将消息发送到从服务器A(主Web应用程序)提供的View.因此,我在这里尝试使用Redis背板.
在我在服务器A的启动中,我添加了以下内容:
GlobalHost.DependencyResolver.UseRedis("localhost", 6379, string.Empty, "abc");
app.MapHubs();
Run Code Online (Sandbox Code Playgroud)
在这里,我假设"myApp"表示频道,当我publish abc "hello world"在Redis控制台上运行时,我可以看到订阅者计数返回为1,但我无法弄清楚SignalR集线器如何与频道交互.我在哪里收到服务器/视图上的消息?我们只能订阅一个redis频道吗?我们不能动态配置订阅特定频道吗?
编辑:如果我订阅,我可以在redis控制台上看到使用SignalR实现的聊天应用程序发送的消息abc.
此外,我现在已经在服务器A上实现了我自己的redis监听器,它在从redis通道接收消息时调用signalR hub功能.我相信必须有不同的方法来做到这一点,我希望redis背板可以帮助我但不确定它是如何工作的.
错误:无法启动连接:错误:WebSocket 连接失败。在服务器上找不到连接,端点可能不是 SignalR 端点,服务器上不存在连接 ID,或者存在阻止 WebSocket 的代理。如果您有多个服务器,请检查粘性会话是否已启用。
WebSocketTransport.js:49 WebSocket 连接到“ws://xxxxxx/product/web-services/hubs/spreadhub”失败:
Angular.ts
ngOnInit(): void {
// For signalR Hub connection
this.connection = new HubConnectionBuilder()
.withUrl('http://xxx.xxx.com/production/web-services/hubs/spreadhub', { // localhost from **AspNetCore3.1 service**
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
})
.build();
this.connection.on('dataReceived', (data: string) => {
var model = JSON.parse(data);
});
this.connection.start().then(() => { // to start the server
console.log('server connected!!!');
}).catch(err => console.log(err));
}
Run Code Online (Sandbox Code Playgroud) 我用SignalR做了一个简单的应用程序进行测试.当页面加载它调用服务器上的函数时,该函数然后调用在屏幕上打印消息的客户端函数.我这样做是为了检查客户端和服务器功能是否正常以及SignalR通信是否正常.
我的问题是,如果我在两个不同的选项卡上打开相同的页面(在Chrome中执行),第一页加载正常,但第二页不会调用服务器的功能 - 仅在我关闭第一页时.
所以据我所知,他们可能是一个与浏览器有关的连接限制,它不允许SignalR多次连接(实际上是两个,一个用于接收,一个用于发送)
更新:我发现我们的其他选项卡处于打开状态,但现在我已经检查了它,它只允许4个选项卡 /页面处于活动状态.如果我尝试将相同的页面放在新选项卡上,则不会发送任何数据,当我关闭其中一个选项卡时,新选项卡会立即发送数据.
我想知道是否有任何解决方案,因为如果用户决定在两个或更多选项卡上打开相同的页面,我希望此连接可用.
我不相信它与IIS有任何关系,因为据我所知,它可以接受数千个连接.
我有多个SignalR'服务'正在运行,只有一个UI可以访问它们.
如何让客户端js与不同Url的多个连接通信?因为看起来我只能为$ .connection.hub指定一个url,而且我不能使用多个'signalr/hubs'客户端脚本.
有帮助吗?谢谢.
signalr ×10
signalr-hub ×3
asp.net ×2
asp.net-mvc ×2
.net ×1
angular ×1
asp.net-core ×1
c# ×1
cors ×1
iis ×1
jquery ×1
nuget ×1
owin ×1
redis ×1
server-push ×1
wpf ×1