Signalr 信号器-如何从不同程序集中的类调用客户端方法?

Signalr 信号器-如何从不同程序集中的类调用客户端方法?,signalr,Signalr,有人能帮我理解吗 如何使用信号器从服务器方法调用客户机方法服务器类驻留在不同程序集中的CustomEvent处理程序中 我尝试了3种不同的方法来调用该方法: 我将我的中心命名为[HubName(“notificationhub”)] 方法1 Clients.addMessage(message); 这将给出“无法对空引用执行运行时绑定” 方法2 IHubContext context1 = GlobalHost.ConnectionManager.GetHubContext("notifica

有人能帮我理解吗

如何使用信号器从服务器方法调用客户机方法服务器类驻留在不同程序集中的CustomEvent处理程序中

我尝试了3种不同的方法来调用该方法:

我将我的中心命名为[HubName(“notificationhub”)]

方法1

Clients.addMessage(message);
这将给出“无法对空引用执行运行时绑定”

方法2

IHubContext context1 = GlobalHost.ConnectionManager.GetHubContext("notificationhub");
context1.Clients.addMessage('hello');
客户保持沉默

方法3

var hubConnection = new HubConnection("http://localhost:21120/");
var notification= hubConnection.CreateProxy("notificationhub");
hubConnection.Start().Wait();
notification.Invoke("Send", "Hello").Wait();
这个方法给出了错误:{“远程服务器返回了一个错误:(500)内部服务器错误。”}令我惊讶的是,我能够使用第三个方法从控制台应用程序调用这个方法

实现这一点的最佳解决方案是什么?我无法调用客户机方法的原因是什么?有人能帮我吗

问候
文斯

我就是这么做的,有点小技巧,但很管用。它只在从控制器调用集线器时起作用,否则将无法工作。使用UpdateHubFromController方法

public class UpdateFeedActivity : Hub
{
    readonly IHubContext _hubContext ;

    public UpdateFeedActivity()
    {
        _hubContext = _hubContext ?? GlobalHost.ConnectionManager.GetHubContext<UpdateFeedActivity>();
    }

    public void UpdateFeed(string groupname, string itemId, Enums.FeedActivityTypes activityType,
                                                                               string userId="",
                                                                               string actionResult1="", 
                                                                               string actionResult2="", 
                                                                               string actionResult3="")
    {
       Clients.Group(groupname).updateMessages(new FeedHubResponse
                                              {
                                                  ItemId = itemId,
                                                  ActivityType = activityType.ToString(),
                                                  UserId = userId,
                                                  ActionResult1 = actionResult1,
                                                  ActionResult2 = actionResult2,
                                                  ActionResult3 = actionResult3
                                              });
    }

    public void UpdateFeedFromController(string groupname, string itemId, Enums.FeedActivityTypes activityType,
                                                                               string userId = "",
                                                                               string actionResult1 = "",
                                                                               string actionResult2 = "",
                                                                               string actionResult3 = "")
    {
        _hubContext.Clients.Group(groupname).updateMessages(new FeedHubResponse
        {
            ItemId = itemId,
            ActivityType = activityType.ToString(),
            UserId = userId,
            ActionResult1 = actionResult1,
            ActionResult2 = actionResult2,
            ActionResult3 = actionResult3
        });
    }



    public void Join(string groupname)
    {
        Groups.Add(Context.ConnectionId, groupname);  
    }
}

public class FeedHubResponse
{
    public string ItemId { get; set; }
    public string UserId { get; set; }
    public string ActionResult1 { get; set; }
    public string ActionResult2 { get; set; }
    public string ActionResult3 { get; set; }
    public string ActivityType { get; set; }
    public string Text { get; set; }
}
公共类UpdateFeedActivity:Hub
{
只读IHubContext\u hubContext;
公共UpdateFeedActivity()
{
_hubContext=_hubContext??GlobalHost.ConnectionManager.GetHubContext();
}
public void UpdateFeed(字符串组名、字符串项ID、Enums.FeedActivityTypes activityType、,
字符串userId=“”,
字符串actionResult1=“”,
字符串actionResult2=“”,
字符串actionResult3=“”)
{
Clients.Group(groupname).updateMessages(新FeedHubResponse
{
ItemId=ItemId,
ActivityType=ActivityType.ToString(),
UserId=UserId,
ActionResult1=ActionResult1,
ActionResult2=ActionResult2,
ActionResult3=ActionResult3
});
}
public void UpdateFeedFromController(字符串组名、字符串项ID、Enums.FeedActivityTypes activityType、,
字符串userId=“”,
字符串actionResult1=“”,
字符串actionResult2=“”,
字符串actionResult3=“”)
{
_hubContext.Clients.Group(groupname).updateMessages(新FeedHubResponse
{
ItemId=ItemId,
ActivityType=ActivityType.ToString(),
UserId=UserId,
ActionResult1=ActionResult1,
ActionResult2=ActionResult2,
ActionResult3=ActionResult3
});
}
公共void联接(字符串groupname)
{
添加(Context.ConnectionId,groupname);
}
}
公共类反馈响应
{
公共字符串ItemId{get;set;}
公共字符串用户标识{get;set;}
公共字符串ActionResult1{get;set;}
公共字符串ActionResult2{get;set;}
公共字符串ActionResult3{get;set;}
公共字符串ActivityType{get;set;}
公共字符串文本{get;set;}
}

我就是这样做的,有点像黑客,但它是有效的。它只在从控制器调用集线器时起作用,否则将无法工作。使用UpdateHubFromController方法

public class UpdateFeedActivity : Hub
{
    readonly IHubContext _hubContext ;

    public UpdateFeedActivity()
    {
        _hubContext = _hubContext ?? GlobalHost.ConnectionManager.GetHubContext<UpdateFeedActivity>();
    }

    public void UpdateFeed(string groupname, string itemId, Enums.FeedActivityTypes activityType,
                                                                               string userId="",
                                                                               string actionResult1="", 
                                                                               string actionResult2="", 
                                                                               string actionResult3="")
    {
       Clients.Group(groupname).updateMessages(new FeedHubResponse
                                              {
                                                  ItemId = itemId,
                                                  ActivityType = activityType.ToString(),
                                                  UserId = userId,
                                                  ActionResult1 = actionResult1,
                                                  ActionResult2 = actionResult2,
                                                  ActionResult3 = actionResult3
                                              });
    }

    public void UpdateFeedFromController(string groupname, string itemId, Enums.FeedActivityTypes activityType,
                                                                               string userId = "",
                                                                               string actionResult1 = "",
                                                                               string actionResult2 = "",
                                                                               string actionResult3 = "")
    {
        _hubContext.Clients.Group(groupname).updateMessages(new FeedHubResponse
        {
            ItemId = itemId,
            ActivityType = activityType.ToString(),
            UserId = userId,
            ActionResult1 = actionResult1,
            ActionResult2 = actionResult2,
            ActionResult3 = actionResult3
        });
    }



    public void Join(string groupname)
    {
        Groups.Add(Context.ConnectionId, groupname);  
    }
}

public class FeedHubResponse
{
    public string ItemId { get; set; }
    public string UserId { get; set; }
    public string ActionResult1 { get; set; }
    public string ActionResult2 { get; set; }
    public string ActionResult3 { get; set; }
    public string ActivityType { get; set; }
    public string Text { get; set; }
}
公共类UpdateFeedActivity:Hub
{
只读IHubContext\u hubContext;
公共UpdateFeedActivity()
{
_hubContext=_hubContext??GlobalHost.ConnectionManager.GetHubContext();
}
public void UpdateFeed(字符串组名、字符串项ID、Enums.FeedActivityTypes activityType、,
字符串userId=“”,
字符串actionResult1=“”,
字符串actionResult2=“”,
字符串actionResult3=“”)
{
Clients.Group(groupname).updateMessages(新FeedHubResponse
{
ItemId=ItemId,
ActivityType=ActivityType.ToString(),
UserId=UserId,
ActionResult1=ActionResult1,
ActionResult2=ActionResult2,
ActionResult3=ActionResult3
});
}
public void UpdateFeedFromController(字符串组名、字符串项ID、Enums.FeedActivityTypes activityType、,
字符串userId=“”,
字符串actionResult1=“”,
字符串actionResult2=“”,
字符串actionResult3=“”)
{
_hubContext.Clients.Group(groupname).updateMessages(新FeedHubResponse
{
ItemId=ItemId,
ActivityType=activi