Push-уведомления SignalR для всех экземпляров браузера одного пользователя, прошедшего проверку подлинности.

Я работаю над приложением, которое должно уведомлять пользователя, когда он получает новое уведомление. Приложение будет размещено в Azure и будет представлять собой.NET MVC 3 (, вероятно, не важно, но для справки). Я также

Уведомления сохраняются в базе данных MSSQL (2008 )и имеют поле IsRead. Уведомления генерируются из различных действий пользователя и сервера. В зависимости от предпочтений пользователя некоторые уведомления будут создаваться с помощью IsRead == false.

У меня есть 2 разных сценария, с которыми, как мне кажется, SignalR будет идеально справляться, мне просто нужно небольшое руководство.:

  1. У пользователя открыто несколько окон при просмотре сайта, и добавлена ​​новая строка уведомлений, назначенная этому пользователю, сIsRead == true
    • Я хотел бы, чтобы все экземпляры браузера конкретного пользователя вызывали определенную функцию js для отображения всплывающего уведомления.
  2. У пользователя открыто несколько окон, и он нажимает на всплывающее уведомление.
    • Я хотел бы, чтобы все экземпляры браузера конкретного пользователя вызывали определенную функцию js для удаления всплывающего уведомления. (Только конкретный экземпляр браузера, обработавший щелчок, также будет выполнять функцию js для отображения сведений об уведомлении)

Что я пробовал


Для первого сценария, я думаю, что то же действие, которое быть записан в базу данных, будет нести ответственность за уведомление всех экземпляров браузера пользователя.

Второй сценарий будет аналогичен тому, что при нажатии на всплывающее окно конечная точка сервера будет вызываться через Ajax, и эта конечная точка будет обновлять базу данных, чтобы пометить уведомление как прочитанное, а затем уведомлять все другие экземпляры браузера пользователя.

Если есть способ отслеживать клиентов SignalR на основе имени пользователя для проверки подлинности с помощью форм ASP.NET, то я думаю, что это поможет решить проблемы в обоих сценариях.

TL;DR


Моя основная проблема заключается в том, что я не знаю, как сигнализировать обо всех экземплярах браузера одного конкретного пользователя с помощью SignalR. Я думал о создании группы на основе имени пользователя ASP.NET Forms Authentication. Будет ли это работать? Есть ли более простой способ, встроенный в SignalR, который справляется с этим?

8
задан Charles 10 April 2012 в 21:55
поделиться