10

私のソリューションには 2 つのプロジェクトがあります。

プロジェクト 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 に答える