Так что я довольно новичок в signalR и работал с ним немного с MVC. Теперь я использую его в webapi с angularjs и немного запутался или забыл о том, что я сделал. Я использую токены-носители с webapi и пытаюсь создать систему уведомлений.Специальный клиент 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 - все пустые строки "". Я читал, что, возможно, это связано с использованием токенов-носителей. Если да, то как я могу использовать токены-носители для конкретного пользователя, к которому я бы хотел отправить? Когда я использую Клиенты. Все работает отлично, поэтому я предполагаю, что это должно быть что-то с запуском/userIds, который я получаю.
Благодаря
Спасибо. Я посмотрю на это, когда у меня появится шанс. Скорее всего, будет больше вопросов. –
Я считаю, что моя проблема связана с значением Irequest. MyProvider выходит за нуль для имени пользователя и authenticationType. Я считаю, что это потому, что я использую токены-носители, а не Cookies. Как мне пройти через userId/userName для Irequest? –
Я не уверен, в чем ваш вопрос. Вы хотите знать, как вызвать клиента с серверной стороны, используя идентификатор соединения? Вы можете использовать метод OnConnected() 'в концентраторе SignalR на стороне сервера и добавить идентификатор соединения подключенного клиента в словарь, используя его имя хоста в качестве ключа. Затем вы можете создать экземпляр концентратора в другом месте и настроить целевые клиенты, используя идентификатор соединения в словаре. Надеюсь это поможет. –