0

SignalR は初めてですが、概念は理解しています。

私の目標は、呼び出されたときに接続されているすべてのクライアントを更新する Web サービスを公開することです。ハブに接続するための小さなノックアウト js を作成しましたが、これはうまく機能します。スタートボタンをクリックすると、接続されている各クライアントにメッセージが送信されます。背景用のコードは次のとおりです。

ハブ:

[HubName("realTimeData")]
public class RealTimeDataHub : Hub
{
    public void UpdateFlash(string message)
    {
        Clients.flashUpdated(message);
    }
    public void clear()
    {
        Clients.cleared();
    }
}

JS:

function viewModel(){
    var self = this;

    self.messages = ko.observableArray([]);

    self.hub = $.connection.realTimeData;

    self.hub.flashUpdated = function (m) {
        self.messages.push(new message(m));
    };
    self.hub.cleared = function () {
        self.messages.removeAll();
    };
    self.Start = function () {          
        self.hub.updateFlash("Updated Flashed from client");
    };
    self.Stop = function () {
        self.hub.clear();
    };
    $.connection.hub.start();
}

ko.applyBindings(new viewModel());

MVC API:

public class HomeController : Controller
{
    public ActionResult Update()
    {
        GetClients().updateFlash("From server");

        return Json(new { result = "ok" }, JsonRequestBehavior.AllowGet);
    }

    private static dynamic GetClients()
    {
        return GlobalHost.ConnectionManager.GetHubContext<RealTimeData.Hubs.RealTimeDataHub>().Clients;
    }
}

問題:

コントローラー (Home/Update、まだ実際の API ではない) から "Update" メソッドを呼び出すと、接続されているクライアントごとに 1 つのシグナルが送信されます。したがって、2 つのクライアントが接続されている場合、各クライアントに対して 2 つの「From Server」メッセージを受け取ります。一つだけ欲しい…

助言がありますか?なんでも大歓迎

ありがとう、

マット

4

1 に答える 1

0

解決:

'using SignalR.Client;' をインポートする必要があります。

public ActionResult Update()
{
    hub.Invoke("UpdateFlash", "From the Home Controller");
    //GetClients().updateFlash("From server");
    return Json(new { result = "ok" }, JsonRequestBehavior.AllowGet);
}

これが私が解決策を見つけた場所です:

https://github.com/SignalR/SignalR/wiki/SignalR-Client-Hubs

これが誰かを助けることができることを願っています。

マット

于 2012-07-31T13:30:33.023 に答える