Реализация signalr для проверки данных в базе данных каждые несколько секунд
Я реализовал SingalR с существующим приложением web Api, где класс SignalR hub будет проверять базу данных каждые несколько секунд и обновлять подключенные клиенты на основе идентификатора соединения.
вот мой хаб класс :
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.AspNet.SignalR; using System.Threading.Tasks; using VHC.Core.Business.Managers.Old; using VHC.Core.Common.Requests; using VHC.Core.Business.Interfaces; using VHC.Core.ServiceProxy.ServiceProxies; namespace VHC.Core.WebAPI { public class NotifyHub : Hub { public static string ConnectionId { get; set; } public string NotificationResult { get; set; } //public NotifyHub() //{ //} public void PushNotificationData(Int32 userId, Int16 userTypeId) { lock (this) { var request = new PushNotificationRequest { FilterProperty = new Common.Filters.FilterProperty { Offset = 0, RecordLimit = 0, OrderBy = "datechecked desc" }, Filters = new List<Common.Filters.FilterObject> { new Common.Filters.FilterObject { LogicOperator = 0, ConditionOperator = 0, Function = 0, FieldName = "", FieldValue = "", FieldType = 0 } } }; INotificationManager inotifity = new NotificationManager(); var taskTimer = Task.Run(async () => { while (true) { //var serviceProxy = new NotificationServiceProxy(); // var NotificationResult = inotifity.PublishResultsAsync(request, userId, userTypeId);--check database if (userId == 3134) { NotificationResult = "validated"; //Sending the server time to all the connected clients on the client method SendServerTime() Clients.Client(ConnectionId).NotificationToClient(NotificationResult); } else { NotificationResult = "not validated"; //Sending the server time to all the connected clients on the client method SendServerTime() Clients.Client(ConnectionId).NotificationToClient(NotificationResult); } //Delaying by 6 seconds. await Task.Delay(6000); } } ); } } public override Task OnConnected() { ConnectionId = Context.ConnectionId; return base.OnConnected(); } } }
Проблема, с которой я сталкиваюсь, заключается в том, что, как мы знаем, клиентское приложение создаст экземпляр концентратора и будет установлено соединение. Когда я запускаю клиентское приложение сразу, у меня не возникает никаких проблем. Когда я запускаю клиентское приложение на двух или более параллельно, я получаю проблему, которая означает, что данные полностью перепутались.
например: для метода PushNotificationData клиентское приложение будет передавать
userID
динамично. В приведенном выше коде я написал логику, когда userID ==3143
, ответ должен быть "подтвержден", иначе "не подтвержден".если я запускаю приложение в одном браузере, я получаю ответ каждые 6 секунд как '
validated
'но если я запускаю приложение на двух или более параллельно,я получаю ответ каждые 6 секунд, как когда-то '
validated
"когда-нибудь "not validated
'.Наверное, что-то случилось. пожалуйста, помогите мне.
Что я уже пробовал:
Я попробовал Lock statement может исправить мою проблему, но это не так.