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が何であるかを確認します。関数がランダムスレッドから呼び出されたときは、そこにはないと思います。