c# - SignalR - 从上下文调用静态类型的集线器

标签 c# signalr asp.net-core-2.0

我正在尝试找出如何从服务器调用强类型集线器上的方法。我正在使用 .Net-Core 2.0

我有一个强类型的集线器接口(interface):

public interface IMessageHub
{
    Task Create(Message message);
}

和一个看起来像这样的集线器:

public class MessageHub: Hub<IMessageHub>
{
    public async Task Create(Message message)
    {
        await Clients.All.Create(message);       
    }
}

通常在服务器上我可能会像这样将内容推送到客户端:

[Route("api/[controller]")]
public MessagesController : Controller
{
       IHubContext<MessagesHub> context;
       public MessagesController(IHubContext<MessagesHub> context)
       {
           this.context = context;
       }

       public Message CreateMessage(Message message)
       {
          this.context.Clients.All.InvokeAsync("Create", message);
          return message;
       }
}

如何在静态类型的集线器上调用方法,或者我是否对集线器的工作方式有误解?

最佳答案

是的,你可以。这是一步一步的示例:

简单地创建一个接口(interface),您可以在其中定义服务器可以调用客户端的哪些方法:

public interface ITypedHubClient
  {
    Task BroadcastMessage(string name, string message);
  }

从集线器继承:

 public class ChatHub : Hub<ITypedHubClient>
      {
        public void Send(string name, string message)
        {
          Clients.All.BroadcastMessage(name, message);
        }
      }

将类型化的 hubcontext 注入(inject) Controller ,并使用它:

[Route("api/demo")]
  public class DemoController : Controller
  {   
    IHubContext<ChatHub, ITypedHubClient> _chatHubContext;
    public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext)
    {
      _chatHubContext = chatHubContext;
    }
    // GET: api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
      _chatHubContext.Clients.All.BroadcastMessage("test", "test");
      return new string[] { "value1", "value2" };
    }
  }

关于c# - SignalR - 从上下文调用静态类型的集线器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47565576/

相关文章:

asp.net-mvc - SignalR Hub ResolutionFailedException 与 Unity

c# - 来自 ActionFilter 的 ModelState - ASP .NET Core 2.1 API

C# 图像生成器 - 性能缓慢

asp.net - Cyber​​panel 上托管的 Asp Net SignalR 出现错误

asp.net - 在 Ubuntu 上更新到 mono 4.0.1 后出现问题

asp.net-core-2.0 - Asp.net Core2 Web Api 发布到 IIS 8.5 总是在访问时给出 404

asp.net - <access sslFlags ="Ssl.SslRequireCer"> 在 .net 核心

c# - 进度对话框在使用 DoEvents 的 Outlook 加载项中挂起

c# - 仅使用缩略图创建器 Azure Function 处理图像

c# - 变更容忍度的建议