我想使用SignalR將數據推送到Web客戶端。如何在SignalR中僅使用服務器功能
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是否爲此提供了方法(例如,僅用於服務器功能的屬性)?
如果我要實現自己的東西,然後我有一些想法,但我不知道他們是多麼好:
- 讓另一個類訪問客戶屬性,那麼它會調用推送。
- 在HUB中存儲某種只有服務器知道的Nonce,並將該Nonce作爲額外參數傳遞給Push。
- 檢查客戶端ID來自上下文。我想這個函數在隨機線程中調用時不存在。
對不起,但我不明白,爲什麼你創建「推」方法作爲公共,如果這只是由服務器使用?只有在服務器端代碼需要時才使用此方法爲私有方法。 –
它是公開的,因爲我想讓服務器上的另一個類調用它。我會更新這個問題。 –
客戶是否需要爲他們提供'PushHub'?如果不是這可能不是問題。如果'PushHub'不是客戶端類,那麼阻止客戶端訪問它將解決所有問題。 – mclark1129