[解決済み] SignalR - (IUserIdProvider)を使って特定のユーザーにメッセージを送信する *NEW 2.0.0*.
質問
Asp.Net SignalRの最新バージョンでは、IUserIdProvider"インターフェースを使用して、特定のユーザーにメッセージを送信する新しい方法が追加されました。
public interface IUserIdProvider
{
string GetUserId(IRequest request);
}
public class MyHub : Hub
{
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
}
私の疑問は、メッセージを送る相手をどうやって知ることができるのか、ということです。この新しいメソッドの説明は、非常に表面的なものです。また、SignalR 2.0.0のドラフト版Statementにはこのバグがあり、コンパイルできません。どなたかこの機能を実装された方はいらっしゃいますか?
より多くの情報: http://www.asp.net/signalr/overview/signalr-20/hubs-api/mapping-users-to-connections#IUserIdProvider
ハグする。
どのように解決するのですか?
SignalRでは、各接続に対してConnectionIdが用意されています。どの接続が誰(ユーザー)のものかを調べるには、接続とユーザーの対応関係を作成する必要があります。これは、アプリケーションでどのようにユーザーを識別するかに依存します。
SignalR 2.0では、これは内蔵の
IPrincipal.Identity.Name
これは、ASP.NET認証時に設定されたログインユーザー識別子です。
しかし、Identity.Name を使用する代わりに、別の識別子を使用してユーザーとの接続をマッピングする必要がある場合があります。この目的のために、この新しいプロバイダは、ユーザーと接続をマッピングするためのカスタム実装と一緒に使用することができます。
IUserIdProviderを使用したSignalRユーザーと接続の対応付けの例
我々のアプリケーションでは
userId
を使用して各ユーザーを識別しているとします。ここで、特定のユーザにメッセージを送信する必要があります。このとき
userId
と
message
というように、ユーザーIDと接続の対応関係を知っている必要があります。
これを実現するために、まず最初に
IUserIdProvider
:
public class CustomUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
// your logic to fetch a user identifier goes here.
// for example:
var userId = MyCustomUserClass.FindUserId(request.User.Identity.Name);
return userId.ToString();
}
}
2番目のステップは、SignalRに私たちの
CustomUserIdProvider
を使用するように SignalR に指示します。これは、ハブ設定を初期化する際にStartup.csで行うことができます。
public class Startup
{
public void Configuration(IAppBuilder app)
{
var idProvider = new CustomUserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => idProvider);
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
これで、特定のユーザーに対してメッセージを送るには、そのユーザーの
userId
のように、ドキュメントに書かれているように
public class MyHub : Hub
{
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
}
これが役立つといいのですが。
関連
-
NET6新機能 新構造体の最適化
-
net core downlink tracking skywalking インストールと使いやすいチュートリアル
-
認証プロセスの記録にjwtを使用したネット
-
403 - アクセス拒否。IIS7 でファイルを開くと、アクセス拒否されます。
-
デバッグエラー蓄積
-
[解決済み] Server Error in '/' Application」エラーの解決方法を教えてください。
-
[解決済み】ASP.NET IdentityのIUserSecurityStampStore<TUser>インターフェースとは何ですか?
-
[解決済み] ASP.NET MVCのAjaxポストでantiforgerytokenを含める。
-
[解決済み] ASP.NETの一時ファイルのクリーンアップ
-
[解決済み] .Netが間違った参照アセンブリのバージョンを選択する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
.NET開発サーバー アプリケーション管理ツール
-
403 - アクセス拒否。IIS7 でファイルを開くと、アクセス拒否されます。
-
[解決済み] System.Data.Entity.Internal.AppConfig' の型イニシャライザーで例外が発生しました。
-
[解決済み] web.configでmaxJsonLengthの長さを無制限に設定することは可能ですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] IIS 500.19 with 0x80070005 The requested page cannot be accessed because the related configuration data for the page is invalid error.
-
[解決済み] Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). この違いは何ですか?
-
[解決済み] イベントログへの書き込み時にSystem.Security.SecurityExceptionが発生する。
-
[解決済み] HTTPハンドラ vs HTTPモジュール
-
[解決済み] WatiNかSeleniumか?[クローズド]