私はSignalR(コアバージョン、現在1.0.0-alpha2-final)を初めて使いました。 私はコントローラアクションからレンダリングされたビューを持っており、ページはリロードせずにいくつかのAPIとやりとりします。他の(APIスタイル)コントローラメソッドからページの一部を更新して、何も返さないようにしたいと思います。 したがって、インデックスビューはコントロールを含むページをレンダリングし、SignalRにも接続します。私が持っているもの.Net Core 2/SignalR:現在接続されているAPIクライアントをコントローラから解決します。
は、メッセージのプレースホルダとして
<div id="DisplayMessages"></div>
です。
私のコントローラには、IHubContextの依存性注入があります。
let connection = new signalR.HubConnection("/signalr", { transport: signalR.TransportType.LongPolling });
connection.on('send',
data => {
var DisplayMessagesDiv = document.getElementById("DisplayMessages");
DisplayMessagesDiv.innerHTML += "<br/>" + data;
});
connection.onClosed = e => {
console.log('connection closed');
};
connection.start().then(() => connection.invoke('send', 'Hello'));
function SendMessage() {
var msg = document.getElementById("txtMessage").value;
connection.invoke('send', msg);
}
私は唯一の最初に、今に送信するページをレンダリングし、それをクライアントに送信する方法を見つけ出すことはできませんどのような
public JsonResult DoSomething([FromBody] DoSomethingParameters parameters)
doSomething();
_signalRHub.Clients.All.InvokeAsync("Send", "Did something with " + parameters.SomeParameter);
ように私のコントローラメソッドの内部からすべてのクライアントにメッセージを送信することができますAPI。サンプルには、ユーザーのIDにマップする例がありますが、ページは匿名ユーザーによってレンダリングできるため、無用です。彼のブラウザがSignalRに接続されている間に、APIを要求しているクライアントの接続IDをどのように受け取ることができますか?
ありがとうございました!
を、それはおそらく不可能です。私は今、ユーザーの名前でグループを作成することで自分自身を助けました。グループはIHubContextから入手できます。 – ExternalUse
接続を開始するために使用するクエリ文字列に任意の値を渡すこともできます。これを使用して、サーバー上で使用して、更新を送信するクライアントを識別できる一意のユーザーIDを提供することができます。 – Pawel
こんにちはPawel、問題は、私はAPIコールを生成するコンポーネントのいくつかを制御できないため、実際にコンポーネントを表示しているページから発信されるコンポーネントの呼び出しを必ずしも識別できないということです。ビットは私が推測するのは難しい。私が言及したグループ方法は幸いに働く。 – ExternalUse