标签: signalr-hub

应用程序池回收的SignalR连接处理

我正在使用SignalR(0.5.3)集线器作为聊天应用程序,每次击键都发送到服务器(保存在数据库中),中继到所有客户端,并返回一个返回值(各种字符串标记)服务器.

它工作正常,直到应用程序池循环,然后它停止将键击中继到所有客户端(因为我猜想内存服务器状态丢失),并且服务器也不返回任何值.此时,我认为通过SignalR的所有请求都由IIS排队,然后在应用程序池被回收后进行处理.

我的问题是如何处理这种情况,以便所有客户端都知道由于应用程序池回收而导致服务器不可用/延迟,通知用户等待一段时间,然后在重新连接时恢复操作?

c# signalr signalr-hub

10
推荐指数
1
解决办法
2910
查看次数

SignalR js客户端似乎忽略了url端口

我正在尝试用SignalR组建一个简单的"Hello World"样式应用程序.稍微复杂的因素是SignalR集线器需要自托管,而不是IIS/ASP.NET.据我所知,我已经让服务器端正常工作,并且它可以在端口8080上使用,但我在连接客户端时遇到了麻烦.我目前遇到的问题是SignalR客户端似乎忽略了我指定的URL上的端口.

具体来说,我在这里有这个代码:

<head runat="server">
    <script type="text/javascript" src="/Scripts/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="/Scripts/json2.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.signalR-0.5.3.js"></script>
    <script type="text/javascript" src="http://<%=Request.Url.Host %>:8080/signalr/hubs"></script>
    <title>SignalR Test</title>
</head>
<body>
    <script type="text/javascript">
        $(function () {

            // Wire up the client to the SignalR server on the same host 
            // as the source of this page, but on port 8080.
            $.connection.url = "http://<%=Request.Url.Host %>:8080/signalr";
            var roomHub = $.connection.roomHub;

            $('#echoButton').click(function () {
                roomHub.echo($('#echoButton').val())
                    .error(function (err) {
                        alert(err);
                    });
            });

            $.connection.hub.start({ transport: 'auto', xdomain: true })
                .done(function () {
                    console.log('Connected.');
                }) …
Run Code Online (Sandbox Code Playgroud)

javascript signalr signalr-hub

10
推荐指数
1
解决办法
8935
查看次数

SignalR覆盖OnConnected(),OnDisconnected()

我试图覆盖OnConnected(),OnDisconnected()方法,但我得到:OnConnected()':找不到合适的方法来覆盖

实现IDisconnect,IConnect接口以及在Connect()和Disconnect()中进行处理与OnConnected(),OnDisconnected()相同吗?

是什么赋予了?

OnConnected()': no suitable method found to override
Run Code Online (Sandbox Code Playgroud)

signalr signalr-hub

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

SignalR&require.js配置

我将SignalR合并到一个项目中,我已经使用require.js来处理我的脚本依赖项.

我在加载"jquery.signalR-1.1.2"后确保调用"/ signalr/hubs"时遇到了一些麻烦.

我得到了它的工作,但我想知道是否有更好的替代品.

这就是我所拥有的:

require(["signalr"], function () {
  require(["noext!/signalr/hubs"], function () {
      //initialize and work with the hub here
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在这里创建一个垫片来建立信号器/集线器和信号器脚本之间的依赖关系?

谢谢!

javascript requirejs signalr signalr-hub

10
推荐指数
1
解决办法
4164
查看次数

SignalR:加载集线器时出错

信号器不加载我的集线器:

SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/js'></script>. 
Run Code Online (Sandbox Code Playgroud)

我打电话app.MapSignalR();startup configuration.

我添加到我的cshtml:

<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/jquery.signalR-2.0.0.js"></script>
<script src="~/signalr/hubs" type="text/javascript"></script>

<script>

    $(document).ready(function () {
        window.hubReady = $.connection.hub.start();
    });

</script>
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc signalr signalr-hub

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

SignalR .NET客户端断开连接

我们遇到了一个有趣的问题.以下是我们的设置:

  • Windows Server 2012上的SignalR Server(ASP.NET MVC应用程序).
  • Sencha HTML5应用程序(SignalR客户端)位于同一服务器(Windows Server 2012)上.
  • Windows Server 2008 R2服务器上的.NET Windows服务.这也充当SignalR客户端.

最初我们使用SignalR 0.5.3 - 当我们开始观察到Windows服务与信号R服务器的连接中断时.频率范围从每几分钟到每几个小时.它在大多数情况下重新连接,但偶尔无法重新连接,导致Windows服务每两天丢失一次连接.但它没有固定的模式.这是不相关的服务器重启/备份等,我们添加记录到Windows服务来监视客户端连接上StateChanged事件,并发现,当断开并重新连接会触发该事件,但不能当它不重新连接.

然后我们遇到了这个帖子:客户经常重新连接

并决定将所有内容升级到SignalR 1.0.1(我们不得不在某些时候这样做).Windows服务也升级到框架4.5(来自Framework 2.0),现在引用新的Microsoft.AspNet.SignalR.Client.dll.这也允许我们(使用新添加的连接属性)确定Windows服务实际上使用ServerSentEvents协议.在Windows Server 2012计算机上安装相同的Windows服务使用WebSockets协议.这与此线程一致:SignalR .NET Client不支持Windows 7上的WebSockets

但是,Windows Server 2008 R2服务器上的服务行为没有更改.它仍然断开连接并重新连接,偶尔会失去连接.由于一些限制,我们无法使用Windows Server 2012进行Windows服务,并且无法使用较旧的操作系统.这并不是说使用websockets协议的Windows服务可以解决我们所有的问题(我们没有彻底测试过).

我们尝试的第三件事是从GitHub获取源代码并编译它并升级服务(SignalR Server和客户端) - 这样做是为了确保我们获得带有任何潜在错误修复的最新副本.

但它没有帮助.我们现在处于一种我们认为已经筋疲力尽的选择.建议将不胜感激.谢谢.

=====================================

编辑:更多信息:

好的,现在我们有更多的信息.我们在Windows服务(SignalR Client)中添加了一些代码,每30分钟登录一次SignalR服务器(用于测试连接).

以下是客户端每30分钟发生的事情:

WriteEvent(Now(), "INFO", "PING", "Performing logon procedure with SiteCode = " & msSiteCode & ".")
trans.Invoke("login", New String() {msSiteCode, "", "SERVER", "", ""})
Run Code Online (Sandbox Code Playgroud)

其中trans是从Hub继承的服务器端类的实例,而WriteEvent基本上是写入日志文件的跟踪.

客户端也有一个'isLoggedIn'方法,如下所示:

Private Sub isLoggedIn(ByVal bLoggedIn As String)
        If bLoggedIn Then
            WriteEvent(Now(), …
Run Code Online (Sandbox Code Playgroud)

signalr signalr-hub signalr.client

9
推荐指数
1
解决办法
6045
查看次数

如何在SignalR中使用通用集线器

我在版本2.1.2中使用SignalR.我注意到有两个公共中心类供我使用,Hub并且Hub<T>.前者有一个MSDN页面似乎已经过时,后者根本没有任何MSDN页面.我相信MSDN文档与Nuget的最新版本的SignalR(我正在使用)不是最新的,因为在ReSharper的帮助下反编译的源显示这两个类都继承自基HubBase类.MSDN页面的继承层次结构部分显示Hub该类继承自Object并实现IHubIDisposable接口,但是反编译的源显示上述HubBase基类,实现IHub接口,而接口又实现IDisposable.

类的非泛型和泛型变体之间的区别在于非泛型的Clients属性返回IHubCallerConnectionContext<dynamic>而泛型变量返回类型IHubCallerConnectionContext<T>.

我想让我的客户输入,所以当我从集线器调用客户端方法时,我会有正确的Intellisense支持和强类型参数.但是,我挣扎的是如何让Hub知道我的客户端模型的方法实际上是在浏览器中调用的.

这是我的TestModel班级:

public sealed class TestModel
{
   public String Name { get; set; }
   public void Notify() {}
   public void NotifyComplex(TestModel model) {}
}
Run Code Online (Sandbox Code Playgroud)

与非通用集线器,我刚刚打电话.Notify().Notify(new TestModel() { Name = "sth" })dynamic立法院约束this.Context.Clients.Client(…)this.Context.Caller,但与一般类,当我打电话以类似的方式,这些空的方法,浏览器不会通知.

你如何按照它应该使用的方式使用通用集线器类?

c# asp.net signalr signalr-hub

9
推荐指数
1
解决办法
7836
查看次数

SignalR - 发送消息OnConnected

我今天一直在尝试使用SignalR,它非常整洁.基本上我想要实现的目标如下:

一旦设备连接,它应该向第一个发送消息.如果有超过1个连接的设备,我想发送两条消息.最后连接的客户端之外的所有人.并且向最后连接的客户端发送一条消息.

当我将它放在自定义API控制器中并且基本上调用动作时,我一直使用的代码非常完美,但这不是我想要的.

我想在OnConnected没有任何用户交互的情况下在设备连接时立即发送消息,但是当我将代码放在OnConnected覆盖内时它会停止工作.它不再发送给特定客户端(首先连接和最后连接).

我希望有人能够帮助我解决这个问题,因为我现在已经敲了几个小时.

    public override System.Threading.Tasks.Task OnConnected()
    {
        UserHandler.ConnectedIds.Add(Context.ConnectionId, UserHandler.ConnectedIds.Count + 1);

        int amountOfConnections = UserHandler.ConnectedIds.Count;
        var lastConnection = UserHandler.ConnectedIds.OrderBy(x => x.Value).LastOrDefault();
        var allExceptLast = UserHandler.ConnectedIds.Take(amountOfConnections - 1).Select(x => x.Key).ToList();

        if (amountOfConnections == 1)
        {
            Clients.Client(UserHandler.ConnectedIds.First().Key).hello("Send to only(also first) one");
        }
        else
        {
            Clients.Clients(allExceptLast).hello("Send to everyone except last");
            Clients.Client(lastConnection.Key).hello("Send to only the last one");
        }

        return base.OnConnected();
    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net signalr signalr-hub signalr.client

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

SignalR中打开的连接列表?

如何从SignalR获取打开的连接列表而不发送"ping"或手动将它们注册到自己的列表中?

更新: 或者只是为了获取从集线器发送消息的客户端数量.我想知道我应该等待多少响应(无需等待整个超时).

(因为,当从集线器调用客户端时,SignalR不支持返回值,我通过客户端发送到集线器的另一条消息收集结果.)

澄清:我假设SignalR必须知道哪些连接正在发送消息.

.net c# signalr signalr-hub

9
推荐指数
1
解决办法
1755
查看次数

SignalR函数返回值

我创建了一个SignalR集线器,它包含以下集线器功能:

public bool GetStatus()
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我想从我的JS代码中调用此函数并获取此调用的请求.像这样的东西:

var result = hub.server.getStatus();
if (result)
    alert('success');
Run Code Online (Sandbox Code Playgroud)

这可能没有返回bool的任务吗?

谢谢.

c# signalr signalr-hub signalr.client

8
推荐指数
1
解决办法
7514
查看次数