これはすでに回答されていることを認識していますが、人々が役立つと思われる別のオプションがあります。これを行う方法に関する情報を見つけるのに苦労したので、これが他の人の助けになることを願っています.
SignalR ClientID の生成をオーバーライドして、メンバーシップの UserID を使用することができます。これは、CleintID -> UserID マッピングを維持する必要がないことを意味します。
これを行うには、IClientIdFactory インターフェイスを実装するクラスを作成します。次のようなことができます:
public class UserIdClientIdFactory : IClientIdFactory
{
public string CreateClientId(HttpContextBase context)
{
// get and return the UserId here, in my app it is stored
// in a custom IIdentity object, but you get the idea
MembershipUser user = Membership.GetUser();
return user != null ?
user.ProviderUserKey.ToString() :
Guid.NewGuid().ToString();
}
}
そして、global.asax で:
SignalR.Infrastructure.DependencyResolver.Register(typeof(IClientIdFactory), () => new UserIdClientIdFactory());
編集 - 下記の nillls のように、signalR バージョン 0.4 で変更されました。ClientId ではなく ConnectionId を使用します。
public class UserIdClientIdFactory : IConnectionIdFactory
{
public string CreateConnectionId(SignalR.Hosting.IRequest request)
{
// get and return the UserId here, in my app it is stored
// in a custom IIdentity object, but you get the idea
MembershipUser user = Membership.GetUser();
return user != null ?
user.ProviderUserKey.ToString() :
Guid.NewGuid().ToString();
}
}
そして DependencyResolver は移動しました:
SignalR.Hosting.AspNet.AspNetHost.DependencyResolver.Register(typeof(IConnectionIdFactory), () => new UserIDClientIdFactory());
これが誰かを助けることを願っています!