10

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

项目 1:“SignalRChat”(MVC) - 工作正常
项目 2:“DatabaseWatcherService” Windows 服务 - 工作正常

我正在尝试从我的 Windows 服务调用 SignalRChat Hub,但它似乎无法正常工作。

这是我从 Windows 服务调用集线器的地方(https://github.com/SignalR/SignalR/wiki/Hubs#broadcasting-over-a-hub-from-outside-of-a-hub):

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);
    }

尝试连接时出现以下错误:

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

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

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

4

1 回答 1

20

据我所知,这仅在您从 Web 应用程序中调用集线器时才有效。

为了从 Web 应用程序外部(例如从 Windows 服务)与集线器进行交互,您需要查看SignalR 客户端集线器文档

  1. 将以下 NuGet 包添加到您的项目中:Microsoft.AspNet.SignalR.Client

  2. 将以下语句添加到页面顶部:using Microsoft.AspNet.SignalR.Client;

  3. 您需要创建与集线器的连接,然后启动连接。


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");  

然后,在您的集线器中,您需要有一个AddNewMessageToPage接受 hello world 字符串并从这里调用的方法Clients.All.addNewMessageTopage(message)

于 2013-04-23T13:44:26.913 回答