C# 信号器-从中心外部通过另一个项目的中心进行广播

C# 信号器-从中心外部通过另一个项目的中心进行广播,c#,signalr,signalr-hub,C#,Signalr,Signalr Hub,我的解决方案中有两个项目: 项目1:“信号卫星”(MVC)-工作正常 项目2: “DatabaseWatcherService”Windows服务-工作正常 我正试图从我的Windows服务打电话到我的SignalChart中心,但它似乎不起作用 这是我从windows服务()调用集线器的地方: void performtime属性(对象发送方,事件参数e) { eventLog1.WriteEntry(“计时器滴答滴答…”); var message=“test”; var context=G

我的解决方案中有两个项目:

项目1:“信号卫星”(MVC)-工作正常
项目2: “DatabaseWatcherService”Windows服务-工作正常

我正试图从我的Windows服务打电话到我的SignalChart中心,但它似乎不起作用

这是我从windows服务()调用集线器的地方:

void performtime属性(对象发送方,事件参数e)
{
eventLog1.WriteEntry(“计时器滴答滴答…”);
var message=“test”;
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.addNewMessageToPage(消息);
}
尝试连接时出现以下错误:

Message=远程服务器返回错误:(500)内部服务器错误

我正在尝试通过
var connection=new HubConnection(“http://localhost:2129");


端口2129是我的MVC项目正在运行的端口。

据我所知,只有当您从web应用程序中调用集线器时,该端口才起作用

为了从web应用程序外部(例如从Windows服务)与中心进行交互,您需要查看

  • 将以下NuGet包添加到项目中:
    Microsoft.AspNet.signal.Client

  • 在页面顶部添加以下语句:
    使用Microsoft.AspNet.signal.Client

  • 您需要创建到集线器的连接,然后启动连接



  • 然后,在您的中心中,您需要有一个用于
    AddNewMessageToPage
    的方法,该方法接受hello world字符串,并从此处调用
    客户端。All.AddNewMessageToPage(message)

    我有一个输入错误..错误的中心名称“MyHub”。一旦我把它改为我的实际中心名称,它就工作得很好。谢谢。这正是我想要的,谢谢!:-)这很糟糕,不是吗?您向所有客户机公开了
    addNewMessageTopage
    ,因此任何连接的客户机都可以调用此方法,而这显然不是目的。我想从WinService向客户端发布消息,但没有找到一个好方法。是的,它向所有人公开。它回答了所问的问题,但您的问题有些不同。@Timb James:这在ASP.NET Core 2.2中可能吗?或任何其他工作。我的问题是:
    void PerformTimerOperation(object sender, EventArgs e)
        {
            eventLog1.WriteEntry("Timer ticked...");
    
            var message = "test";
    
            var context = GlobalHost.ConnectionManager.GetHubContext<SignalRChat.ChatHub>();
            context.Clients.All.addNewMessageToPage(message);
        }
    
    var connection = new HubConnection("http://mysite/");
    IHubProxy myHub = connection.CreateHubProxy("MyHub");
    
    connection.Start().Wait(); // not sure if you need this if you are simply posting to the hub
    
    myHub.Invoke("addNewMessageToPage", "Hello World");