所以我對signalR相當新,並與MVC一起工作。現在我用angularjs在webapi中使用它,並且有點困惑或者忘記了我所做的。我正在使用帶有webapi的持票人標記,並試圖創建通知系統。SignalR客戶端特定與angularjs
我想知道的是在signalR中使用angularjs的正確方法。我看到很多人在/ invoke上使用代理。是proxy.on是,當我致電hubcontext從服務器像這樣:
IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>(); hubContext.Clients.User(UserId).broadcastNotification("Good morning! The time is " + DateTime.Now.ToString());
和proxy.invoke方法是從客戶端?如果是這樣,這將是使用通知系統的最佳方式(我會假設proxy.on)?
我的第二個問題是更多地向特定用戶發送通知。對於將請求發送給特定的用戶,我會假設你想做到這一點的輪轂爲這樣:
public void SendNotification(string userId) { Clients.User(userId).broadcastNotification("Good morning! The time is " + DateTime.Now.ToString()); }
我的啓動是這樣的:
public class MyProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
var userId = request.User.Identity.Name;
return userId.ToString();
}
}
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
Database.SetInitializer(new MigrateDatabaseToLatestVersion<AuthContext, Travelfy.API.Migrations.Configuration>());
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => new MyProvider());
app.MapSignalR("/hubs", new HubConfiguration());
}
當我刷新我的網頁,我注意到我所有的userid都是空字符串「」。我正在閱讀,也許這是由於使用持票人令牌。如果是這樣,我將如何使用持票人標記來指定我想要發送給的用戶標識?當我使用Clients.All一切工作正常,所以我假設它必須是啓動/ userIds我得到的東西。
感謝
感謝。當我有機會時,我會看看這個。很可能會有更多的問題。 –
我相信我的問題是關於Irequest值MyProvider對於userName和authenticationType來說是空的。我相信這是因爲我使用的是持有者令牌而不是Cookie。我如何通過Irequest的userId/userName? –
我不確定你的問題是什麼。你想知道如何使用連接ID從服務器端調用客戶端?您可以在服務器端的SignalR集線器中使用「OnConnected()」方法,並使用其主機名作爲密鑰將連接的客戶端的連接ID添加到字典中。然後,您可以在其他地方實例化集線器,並使用字典中的連接ID定位特定客戶端。希望這可以幫助。 –