相关疑难解决方法(0)

从Controller调用SignalR Core Hub方法

如何从Controller调用SignalR Core Hub方法?
我使用ASP.NET Core 2.0与Microsoft.AspNetCore.SignalR(1.0.0-alpha2-final).

我有与Excel,SolidEdge通信的Windows服务...当操作完成后,它会在ASP.NET核心应用程序中向我的控制器发送请求.现在我需要通过SignalR通知连接到服务器的所有客户端,外部程序完成了一些任务.
我无法改变窗口服务的工作方式.(无法从窗口服务连接到SignalR).
我为旧的SignalR(GlobalHost.ConnectionManager.GetHubContext)找到了很多解决方案,但是已经发生了很大变化,而且这些解决方案不再适用了.

我的控制器:

[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        //call method TaskCompleted in Hub !!!! How?

        return new JsonResult(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的中心:

public class VarDesignHub : Hub
{
    public async Task TaskCompleted(int id)
    {
        await Clients.All.InvokeAsync("Completed", id);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

39
推荐指数
4
解决办法
3万
查看次数

尝试激活“XXXXX”时无法解析类型“Microsoft.AspNetCore.SignalR.Hub`1[IXXXX]”的服务

我完全按照 MS 规则定义我的强类型 SignalR 集线器

public class OutputMessages : Hub<IOutputMessages>
{...}
Run Code Online (Sandbox Code Playgroud)

比用同样的方式将我的 SignalR hub 注入到控制器中

public class ApplicationAPIController : ControllerBase
{
     public ApplicationAPIController(IHubContext<OutputMessages, IOutputMessages> _outputMessages)
     {...}
}
Run Code Online (Sandbox Code Playgroud)

在启动中我将 SignalR 服务添加为

        services.AddSignalR()
                .AddHubOptions<OutputMessages>(options =>
                {
                    options.EnableDetailedErrors = true;
                })
Run Code Online (Sandbox Code Playgroud)

并定义端点

        app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub<OutputMessages>("/OutputMessages", options =>
                {
                   options.Transports =
                   HttpTransportType.WebSockets |
                   HttpTransportType.LongPolling;
                });

           });
Run Code Online (Sandbox Code Playgroud)

看起来不错?是的。而且编译也不错。但在运行时我收到

fail: Microsoft.AspNetCore.SignalR.HubConnectionHandler[1]
      Error when dispatching 'OnConnectedAsync' on hub.
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.SignalR.Hub`1[IOutputMessages]' while attempting to activate 'OutputMessages'.
   at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, …
Run Code Online (Sandbox Code Playgroud)

dependency-injection signalr asp.net-core

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