标签: signalr

如何在SignalR中停止轮询?

有没有办法在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)

signalr

17
推荐指数
1
解决办法
2万
查看次数

SignalR超时属性

我们遇到了这个指定不同超时属性的链接: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 signalr-hub signalr.client

17
推荐指数
2
解决办法
2万
查看次数

SignalR Client Hub上的On事件不会被调用

我似乎与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 signalr-hub

17
推荐指数
1
解决办法
2万
查看次数

我似乎无法使用MVC4安装SignalR

我是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的新手.如果有人有任何提示或替代方案,我会很感激.

nuget asp.net-mvc-4 signalr

17
推荐指数
1
解决办法
1万
查看次数

SignalR不再工作"找不到包含OwinStartupAttribute的程序集"

我有一个使用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

asp.net signalr asp.net-web-api owin

17
推荐指数
2
解决办法
4万
查看次数

将Redis与SignalR一起使用

我有一个在服务器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背板可以帮助我但不确定它是如何工作的.

c# asp.net-mvc redis asp.net-mvc-4 signalr

17
推荐指数
1
解决办法
9385
查看次数

无法启动连接:错误:WebSocket 连接失败

错误:无法启动连接:错误: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 asp.net-core angular

17
推荐指数
2
解决办法
4万
查看次数

研究从服务器通知WPF客户端的解决方案

我有一个项目提出要求在服务器上发生某些事情时通知WPF桌面客户端.此外,WPF客户端的通知不会被广播(发送给每个客户端),应该发送给特定的客户端.

我想远离旧式服务器轮询.这需要尽可能接近实时.

我之前从未有过这个要求,而且我正在研究解决方案.我的第一个想法是将SignalR.NET客户端一起使用.我还没有使用过SignalR,但似乎它可能是一个解决方案.我知道这是对长轮询,服务器发送事件和WebSockets的抽象,具体取决于可用的内容.

我已经简要地阅读了有关回调和服务总线的WCF,但是对它们一无所知或这些技术是否适用于此.我可以使用之前解决过这个问题的人的一些反馈和建议.你会怎么做?

.net wpf client-server server-push signalr

16
推荐指数
2
解决办法
4655
查看次数

SignalR和浏览器连接限制

我用SignalR做了一个简单的应用程序进行测试.当页面加载它调用服务器上的函数时,该函数然后调用在屏幕上打印消息的客户端函数.我这样做是为了检查客户端和服务器功能是否正常以及SignalR通信是否正常.

我的问题是,如果我在两个不同的选项卡上打开相同的页面(在Chrome中执行),第一页加载正常,但第二页不会调用服务器的功能 - 仅在我关闭第一页时.

所以据我所知,他们可能是一个与浏览器有关的连接限制,它不允许SignalR多次连接(实际上是两个,一个用于接收,一个用于发送)

更新:我发现我们的其他选项卡处于打开状态,但现在我已经检查了它,它只允许4个选项卡 /页面处于活动状态.如果我尝试将相同的页面放在新选项卡上,则不会发送任何数据,当我关闭其中一个选项卡时,新选项卡会立即发送数据.

我想知道是否有任何解决方案,因为如果用户决定在两个或更多选项卡上打开相同的页面,我希望此连接可用.

我不相信它与IIS有任何关系,因为据我所知,它可以接受数千个连接.

asp.net iis push-notification signalr

16
推荐指数
1
解决办法
1万
查看次数

SignalR客户端具有多个连接

我有多个SignalR'服务'正在运行,只有一个UI可以访问它们.

如何让客户端js与不同Url的多个连接通信?因为看起来我只能为$ .connection.hub指定一个url,而且我不能使用多个'signalr/hubs'客户端脚本.

有帮助吗?谢谢.

asp.net-mvc jquery cors signalr signalr-hub

16
推荐指数
2
解决办法
2万
查看次数