在 asp.net 中从外部集线器调用 wpf signalr 客户端方法

Calling wpf signalr client methods from outside hub in asp.net

public async Task ApplyChangedSettings()
{
    if (ConnectionTimeEntryHub.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected)
    {
        var d = await HubProxy.Invoke<TimeEntryV2.Models.Models.UpdatingSettings>("GetSettings", User.UserIdentity);
        TimeEntrySettings = d;
    }
}

以上方法是在 wpf 客户端视图模型中创建的,我想根据文档

在我的 asp.net Web 应用程序中从 class 外部集线器调用此方法
var hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<TimeEntryHub
s.TimeEntrySettingsHub>();
if (TimeEntryHubs.TimeEntrySettingsHub.Users.Any(f => f.Value == userId))
{
    var connectionID = TimeEntryHubs.TimeEntrySettingsHub.Users.Where(f => f.Value == userId).Single().Key;
    hubContext.Clients.Client(connectionID).ApplyChangedSettings();
}

我正在获取如上所述的集线器上下文,但它没有执行任何操作,它会静默执行,没有任何错误,并且不会反映任何更改

我单步执行代码,它没有调用 .net 客户端上的方法,未达到客户端方法上的断点

使用 Dependencyresolver 解决了我的问题

在服务器端

var dependencyResolver = GlobalHost.DependencyResolver;
var connectionManager = dependencyResolver.Resolve<IConnectionManager>();
var hubContext = connectionManager.GetHubContext<TimeEntryHubs.TimeEntrySettingsHub>();

   if (TimeEntryHubs.TimeEntrySettingsHub.Users.Any(f => f.Key == userId))
      {
        var connectionID = TimeEntryHubs.TimeEntrySettingsHub.Users.Where(f => f.Key == userId).Single().Value;
        hubContext.Clients.Client(connectionID).ApplyChangedSettings();
      }

在客户端

HubProxy.On("ApplyChangedSettings", () =>   ApplyChangedSettings().ConfigureAwait(false));

public async Task ApplyChangedSettings()
 {
   if (ConnectionTimeEntryHub.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected)
        {
            await ApplySettings().ConfigureAwait(false);
        }
 }