SignalRハブクラスが数秒ごとにデータベースをチェックし、接続IDに基づいて接続されているクライアントを更新する、既存のWeb APIアプリケーションでSingalRを実装しました。私たちは、クライアントアプリケーションがハブインスタンスを作成し、接続が確立されます知っているように、私が直面してる数秒ごとにデータベース内のデータをチェックするためのSIgnalRの実装
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();
}
}
}
問題があり、 :
は、ここに私のハブクラスです。一度にクライアントアプリケーションを実行しているときに、問題は発生しませんでした。 2つ以上の並列アプリケーションでクライアントアプリケーションを実行しているときに、データが完全に混乱しているという問題が発生しています。
例:PushNotificationData
メソッドの場合、クライアントアプリケーションはuserID
を動的に渡します。上記のコードでは、userID ==3143
のときにロジックを書いていますが、応答は「検証済み」、そうでなければ「検証されていません。
私は1つのブラウザでアプリケーションを実行している場合
を「検証」として、私は、応答ごとに6秒を取得していますが、私は並列2以上でアプリケーションを実行している場合は、私が取得しています応答は6秒ごとに「検証された」時には「検証されていない」時間となる。
私は何かが混乱していると思います。親切に私を助けてください。私はその希望を明確にしたい。