相关疑难解决方法(0)

ASP.NET Core RC2 SignalR Hub上下文请求线程

我目前正在尝试RC2发布,ASP.NET Core我遇到了一个问题SignalR.我需要能够在请求线程之外向客户端发送消息.

现在在完整的.NET框架中,您可以这样做:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.<SendMessage>()
Run Code Online (Sandbox Code Playgroud)

但在ASP.NETCore中没有GlobalHost.

我发现了一个类似的问题: 如何在vNext项目中获取SignalR Hub上下文?

第二个答案提供了一种在请求线程之外获取hubcontext的方法,但这也不起作用ASP.NET Core.

所以我的问题是:如何在ASP.NET Core中的请求范围之外获取集线器上下文?

asp.net signalr asp.net-core asp.net-core-1.0 .net-core-rc2

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

在SignalR中传递强类型的集线器

我刚刚更新了一些SignalR引用,但为了允许一般类型的Hub,情况有所改变Hub<T>.在现有的示例和文档中,例如:

服务器广播与 - Signalr

我们有一个静态类,通过以下机制保存对客户端的引用:

public class StockTicker()
{
private readonly static Lazy<StockTicker> _instance = new Lazy<StockTicker>(
            () => new StockTicker(GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>().Clients));

 IHubConnectionContext Clients {get;set;}

 private StockTicker(IHubConnectionContext clients)
        {
            Clients = clients;
        }
}
Run Code Online (Sandbox Code Playgroud)

因此检查静态引用,如果为null则它会到达:

GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>().Clients
Run Code Online (Sandbox Code Playgroud)

创建实例并通过构造函数提供客户端.

所以这就是它以前的工作方式,而且确实是上面的网址是如何工作的.但现在Hub<T>构造函数需要稍微改变:

 private StockTicker(IHubConnectionContext<dynamic> clients)
 {
   Clients = clients;
 }
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何进一步扩展这一点,以便我的StockTicker版本可以为x类型的客户端提供强类型属性.

 IHubConnectionContext<StockTickerHub> Clients {get;set;}

 private StockTicker(IHubConnectionContext<dynamic> clients)
 {
   Clients = clients; // Fails, wont compile
 }
Run Code Online (Sandbox Code Playgroud)

通过维护强类型引用,我可以调用强类型方法等.

c# asp.net signalr signalr-hub

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

使用 Singleton 与单独的 SignalR Hub 实现聊天

我只是想知道为什么Microsoft 推荐的 Blazor-Server-Chat 解决方案是初始化 Signal R Hub。从技术上来说,所有的C#代码都是在服务器上执行的,所以也可以通过单例来实现聊天:

public class MySingleton
{
    public event Action<string> OnBroadcast
    public void Send(string msg)
    {
        OnBroadcast.Invoke(msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Blazor 组件中,我使用此单例、订阅事件并调用Send(...).

为什么我应该使用单独的 SignalR Hub 来实现此聊天?

signalr signalr-hub blazor blazor-server-side

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