标签: signalr-2

将SignalR 2.0 .NET客户端重新连接到服务器中心的最佳实践

我在移动应用程序中使用SignalR 2.0和.NET客户端,因此我需要处理各种类型的断开连接.有时SignalR客户端在没有我帮助的情况下重新连接 - 有时我必须通过再次调用HubConnection.Start()来重新连接.(因为SignalR在某些时候神奇地自动重新连接,我想知道我是否缺少功能或配置设置)

设置自动重新连接的客户端的最佳方法是什么?我已经看过处理Closed()事件的javascript示例,然后在n秒后连接.有没有推荐的方法?

我已经阅读了有关SignalR连接生命周期的文档和几篇文章,但我仍然不清楚如何处理客户端重新连接.

谢谢!

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

78
推荐指数
3
解决办法
7万
查看次数

关闭客户端时SignalR Websocket异常

启动和停止连接到基本自托管服务器的SignalR客户端时,如下所示:

async public void Start(string url)
{
    _connection = new HubConnection(url);
    _proxy = _connection.CreateHubProxy("hubname");
    await _connection.Start().ContinueWith((task) => IsRunning = true);
}
public void Stop()
{
    _connection.Stop();
}
Run Code Online (Sandbox Code Playgroud)

调用"Stop"方法(包括跟踪消息)时,我收到以下异常:

SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(c75fe282-a86d-406a-935b-5981b47bd472)
SignalR.Transports.TransportHeartBeat Information: 0 : Connection 1bdabc19-e0a7-4649-aabb-bade071ad6d0 is New.
SignalR.Transports.WebSocketTransport Information: 0 : Abort(1bdabc19-e0a7-4649-aabb-bade071ad6d0)
SignalR.Transports.TransportHeartBeat Information: 0 : Removing connection 1bdabc19-e0a7-4649-aabb-bade071ad6d0
SignalR.Transports.WebSocketTransport Information: 0 : End(1bdabc19-e0a7-4649-aabb-bade071ad6d0)
SignalR.Transports.WebSocketTransport Verbose: 0 : DrainWrites(1bdabc19-e0a7-4649-aabb-bade071ad6d0)
SignalR.Transports.WebSocketTransport Information: 0 : CloseSocket(1bdabc19-e0a7-4649-aabb-bade071ad6d0)
App.vshost.exe Error: 0 : Error while closing the websocket: System.Net.WebSockets.WebSocketException (0x80004005): An …
Run Code Online (Sandbox Code Playgroud)

c# sockets signalr.client owin signalr-2

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

SignalR配置HubConnection

我正在使用Asp.Net SignalR 2.

在.net客户端(我使用的是Microsoft.AspNet.SignalR.Client)中,是否需要部署HubConnection?

我尝试过这样做,但需要花费太多时间......

.net asp.net dispose signalr.client signalr-2

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

如何使用Angular 7应用程序连接SignalR

我根本无法弄清楚如何从Angular建立信号发送器连接。

https://docs.microsoft.com/zh-cn/aspnet/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc使用以下教程

SignalR在vs2017中为现有的.Net 4.6解决方案添加了一个新的2.4.0项目。

我也有一个Angular 7应用程序,我SignalR通过它向其中添加了软件包npm install @aspnet/signalr

现在,我试图在客户端和服务器之间建立一个简单的连接,但无法弄清楚如何建立初始连接。

我的前端一直抛出异常:

 core.js:15714 ERROR Error: Uncaught (in promise): Error: Cannot send data if the connection is not in the 'Connected' State.
Run Code Online (Sandbox Code Playgroud)

错误:如果连接未处于“已连接”状态,则无法发送数据。

在前端搜索组件中,我添加了一些测试字段:

 core.js:15714 ERROR Error: Uncaught (in promise): Error: Cannot send data if the connection is not in the 'Connected' State.
Run Code Online (Sandbox Code Playgroud)

在我的ts文件中:

<mat-form-field>
    <input matInput placeholder="message" [(ngModel)]="message">
</mat-form-field>
<button mat-button type="button" (click)="sendMessageToServer()"><span>Send</span></button>            
<p *ngFor="let m of messages">{{m}}</p>
Run Code Online (Sandbox Code Playgroud)

在C#端,我添加了一个SignalR Hub Class (v2) …

c# signalr signalr-2 angular

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

如何安全地向特定用户发送消息

我正在使用ASP.NET MVC 5和SignalR.我想向特定用户发送消息.我已经按照本教程中解释的方法(也是本答案的建议).

我已经覆盖IUserIdProvider,UserId用作connectionId.

public class SignalRUserIdProvider : IUserIdProvider
{
    public string GetUserId(IRequest request)
    {
        // use: UserId as connectionId
        return Convert.ToString(request.User.Identity.GetUserId<int>());
    }
}
Run Code Online (Sandbox Code Playgroud)

我已对我的应用程序进行了更改Startup以使用上述自定义提供程序:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var idProvider = new SignalRUserIdProvider();
        GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => idProvider);
        ConfigureAuth(app);
        app.MapSignalR();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的客户端可以将目标ClientID传递到集线器,集线器只将消息转发给请求的客户端,这是我的集线器:

[Authorize] 
public class ChatHub : Hub
{
    public void Send(string message, string destClientId)
    {
        Clients.User(destClientId).messageReceived(Context.User.Identity.Name + " …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc signalr asp.net-identity signalr-2

7
推荐指数
1
解决办法
624
查看次数

即使在客户端切断互联网后,SignalR 2仍然可以看到连接

我在startup.cs上配置服务器如下

GlobalHost.HubPipeline.RequireAuthentication();

// Make long polling connections wait a maximum of 110 seconds for a
// response. When that time expires, trigger a timeout command and
// make the client reconnect.
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(40);
// Wait a maximum of 30 seconds after a transport connection is lost
// before raising the Disconnected event to terminate the SignalR connection.
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
// For transports other than long polling, send a keepalive packet every
// 10 seconds. 
// This value must …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc oauth-2.0 signalr-2

6
推荐指数
0
解决办法
595
查看次数

是否有类似于Web API帮助页面的SignalR自动文档?

在ASP.NET Web API项目中,我们可以创建“ 帮助页面”,该页面会自动为项目中的所有Web API生成文档。

我们可以对SignalR做同样的事情吗?

asp.net signalr asp.net-web-api signalr-2

5
推荐指数
0
解决办法
98
查看次数

SignalR 2、Autofac 3.5、MVC 5 和 OWIN:如何将 SignalR 集线器注入控制器?

我正在尝试使用 SignalR 将通知系统添加到我的 MVC Web 应用程序。我想在控制器中发生某些操作时触发通知。

由于Microsoft 优秀的 SignalR 文档,让 SignalR 2 启动并运行是一件轻而易举的事,但我现在正在努力弄清楚如何更改该代码以使用 Autofac 进行 DI,以便我可以注入集线器,或者允许我的东西访问集线器,进入控制器。

我已经按照Autofac 文档中的示例设置了 Autofac 依赖解析器:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "ApplicationCookie",
            LoginPath = new PathString("/Account/Login"),
            CookieName = "fornet"
        });


        var builder = new ContainerBuilder();

        // STANDARD SIGNALR SETUP:

        // Get your HubConfiguration. In OWIN, you'll create one
        // rather than using GlobalHost.
        var config = new HubConfiguration();

        // Register your SignalR hubs. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc autofac signalr signalr-2

5
推荐指数
1
解决办法
826
查看次数

AspNetCore 2.0 + signalR 1.0.0 alpha2 添加管道或中间件

在旧版本的 SignalR 和 .NetFreamwork 中,我使用的类继承了 HubPipelineModule 类,如:

public class IsConnectedPipeLine : HubPipelineModule
{
    protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context)
    {
        if (context.MethodDescriptor.Name == "GetToken")
            return true;
        return ChatIdentity.CheckToken(context.Hub.Context.GetCurrentUserToken());
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想开始在 .NetCore 2.0 和 SignalR 1.0.0 alpha 2 中进行开发,但我不知道如何在 Web API 控制器中实现管道、中间件或类似 costum ActionAttribute 的东西,我不在乎如何,基本上我需要 OnBeforeIncoming功能。

我搜索并只找到了这篇文章,但它很旧,而不是新版本。

signalr asp.net-core signalr-2 asp.net-core-2.0

5
推荐指数
1
解决办法
821
查看次数

Azure SignalR 服务连接未激活

我从 2.4.0 更新了我们的信号器包并添加RunAzureSignalRRunSignalR. 在 de 中添加了此代码Startup.cs

app.Map("/signalr", map =>
{
    var hubConfiguration = new HubConfiguration
    {
        EnableDetailedErrors = true
    };

    map.RunAzureSignalR(typeof(Startup).FullName, hubConfiguration, options =>
    {
        options.ConnectionString = AppApiSettings.SignalRServiceConnectionString;
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试向集线器发送消息时,出现异常The connection is not active, data cannot be sent to the service.。找不到任何原因会发生这种情况或服务无法运行的原因。

当我使用 RunSignalR(自托管)时,一切运行良好。

任何帮助将不胜感激。

asp.net-mvc signalr-2 azure-signalr

5
推荐指数
1
解决办法
1392
查看次数

获取 SignalR 连接启动错误堆栈

如何在 SignalR 连接设置期间获取其他功能正常的 Web 应用程序中发生的异常的完整堆栈?

背景

我是维护带有 C# 客户端的 Web 应用程序的团队的一员,该应用程序使用极其基本的 SignalR 设置(版本 2.2)在长时间运行的服务器进程期间有效地提供有关进度的推送通知。就像,开箱即用,

app.MapSignalR();
Run Code Online (Sandbox Code Playgroud)
HubConnection connection = new HubConnection(_applicationConfiguration.ApiBaseUri + "/signalr");
await connection.Start();
Run Code Online (Sandbox Code Playgroud)

基本的。我们的一些客户端在远程服务上运行,并定期遇到一个问题,即 Web 应用程序的其他功能工作正常,但调用的客户端代码connection.Start()返回 500 内部服务器错误,没有进一步的信息。他们可以通过刷新远程连接来解决它,但这不太理想,所以我试图获取一些有关连接设置过程中发生此错误的位置的信息。

问题

按照有关在 MSDN 上为 SignalR 设置错误处理的信息,我尝试通过将以下管道模块插入到以下管道模块中来模拟问题GlobalHost.HubPipeline

public class HubErrorHandlingModule : HubPipelineModule
  {
    public override Func<IHub, Task> BuildConnect(Func<IHub, Task> connect)
    {
      throw new InvalidOperationException("Testing Connection Exceptions");
    }

    protected override void OnIncomingError(ExceptionContext exceptionContext, 
      IHubIncomingInvokerContext invokerContext)
    {
      // some logging happens here
      base.OnIncomingError(exceptionContext, invokerContext);
    }
  }
Run Code Online (Sandbox Code Playgroud)

它有点工作,因为我可以看到在管道代码中抛出异常,并且我的测试 C# 客户端也看到 …

c# asp.net-mvc-4 signalr.client signalr-2

5
推荐指数
1
解决办法
573
查看次数

何时在 signalR 中使用多个集线器?

我正在使用信号 R 开发聊天应用程序。

我想知道什么时候在信号 r 中使用多个集线器,有什么好处,使用多个集线器还是使用单个集线器是好方法?

signalr signalr-hub signalr-2

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

错误@types/signalr/index.d.ts 不是 ta 模块

我正在尝试在 Typescript 中使用信号器。服务器端是 ASP.NET(不是 ASP.NET CORE)我安装了 signalR(https://www.npmjs.com/package/signalr)和@types/signalr(https://www.npmjs.com/package/ @类型/信号)。

我的导入看起来像这样:

import * as signalR from 'signalr';
Run Code Online (Sandbox Code Playgroud)

问题是我收到了一个错误:“文件 '... /node_modules/@types/signalr/index.d.ts' 不是一个模块。

不知道该怎么办。只有在使用 signalR 库时才会出现这个问题。

signalr typescript-typings signalr-2

0
推荐指数
1
解决办法
620
查看次数