2

SignalRを使用してデータをWebクライアントにプッシュしたいと思います。

public class PushHub : Hub
{
    public void Push(string data)
    {
        Clients.push(data);
    }
}

public class DataGenerator
{
    private readonly PushHub pushHub;

    public void DataGenerator(PushHub pushHub)
    {
        this.pushHub = pushHub;
    }

    public void Tick()
    {
        pushHub.Push("Ping");
    }
}

ただし、クライアントがこの関数を呼び出せないようにする必要があります。

サーバーから、Hubオブジェクト自体で関数を呼び出すことを計画しています(それが悪い考えでない限り)。

しかし、クライアントがプッシュを呼び出せないようにしたいと思います。

SignalRはこのための手段を提供しますか(たとえば、サーバーのみの機能の属性)?

自分で何かを実装する必要がある場合、いくつかのアイデアがありますが、それらがどれほど優れているかはわかりません。

  • 別のクラスがClientsプロパティにアクセスできるようにします。これにより、Pushが呼び出されます。
  • サーバーだけが知っているある種のノンスをHUBに保存し、そのノンスを追加パラメーターとしてプッシュに渡します。
  • コンテキストからクライアントIDが何であるかを確認します。関数がランダムスレッドから呼び出されたときは、そこにはないと思います。
4

1 に答える 1

11

Hubから継承すると、そのパブリックメソッドがクライアントに公開されます。

私の推測では、Hubからクラスを継承せずにサーバーメソッドからクライアントを呼び出したい場合は、次のようにハブオブジェクトを解決して保持することで呼び出すことができます。

 public class Notifier
    {
        public static void Say(string message)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
            context.Clients.say(message);
        }
    }
}

ハブに関するSignalRwikiを参照してください:https ://github.com/SignalR/SignalR/wiki/Hubs

于 2012-08-29T13:45:41.143 に答える