多くのワーカープロセスを管理するハブがあります。私は、このハブに接続し、これらのワーカープロセスのいずれかから処理ログを取得できるUIを構築したいと考えています。基本的に、これは別のクライアントから文字列を取得したいクライアントになります。私はクライアントBに送信されたクライアントAからの要求を得ることができましたが、その応答で何かを返す方法はわかりません。C#SignalRクライアントから値を返す方法
私はハブに
public void GetRunLog(int runid)
{
JobRunLog log = null;
JobRunClient client = this.GetClientByRunID(runid);
if(client != null)
{
var rawlog = Clients.Client(client.ConnectionID).GetRunLog();
log = JsonConvert.DeserializeObject<JobRunLog>(rawlog);
Clients.Client(Context.ConnectionId).GetRunLog(log);
}
}
を簡単な方法を持っている。この要求は、クライアントによって拾われますが、私はvar rawlog
が実際に何かを含むように、それが値を返すようにする方法を知りません。現時点では、これは私が思い付くことができる最良の回避策です。
myHubProxy.On("GetRunLog", (uiconnectionid) =>
{
string connectionid = uiconnectionid;
myHubProxy.Invoke("ReturnRunLog", run.ID, run.Log, connectionid).ContinueWith(task => {});
});
これは、ワーカークライアントがログを要求していたクライアントを参照して戻って別のリクエストにログを送信するようになりますが、それは実際には最初の要求にrespnonseを返すイマイチ。私はこれを実現させる方法を見ることができません。 Invokeを使用するのではなく、要求を開始したハブのメソッドにオブジェクトを直接返すだけですか?
この私はどこで仕事をしていたのですか?私は、クライアントからの単純な応答を得るにはサーバーがvar response = Clients.Client(conid).somefunction()を使用するだけの方法はないと仮定していますか? –
はい、正しいですが、[次のメソッド呼び出しから状態を維持するために使用することはできません](https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to- the-api/hubs-api-guide-server#hubclass) – ASpirin