0
pankajmathur created
Hi,
I am using Hangfire for background job.
public override void Execute(GeneratePayloadAndSendToMobileArgs generatePayloadAndSendToMobileArgs)
{
Task SendDataToMobileTask = Task.Run(() => SendDataToMobile(generatePayloadAndSendToMobileArgs));
SendDataToMobileTask.Wait();
}
private async Task SendDataToMobile(GeneratePayloadAndSendToMobileArgs generatePayloadAndSendToMobileArgs)
{
try
{
using (_abpSession.Use(generatePayloadAndSendToMobileArgs.TenantId, generatePayloadAndSendToMobileArgs.UserId))
{
using (var unitOfWork = _unitOfWorkManager.Begin())
{
Dictionary<RetailObjectId, ICRUDAppService> CRUDAppServices = new Dictionary<RetailObjectId, ICRUDAppService>();
List<PayloadData> PayloadsToSend = new List<PayloadData>();
Dictionary<long, string> PayloadsToSave = new Dictionary<long, string>();
var Payloads = (from Rep in _ReplicationTransactionMobileRepository.GetAll()
select new
{
SequenceNo = Rep.Id,
SourceType = (RetailObjectId)Rep.SourceType,
SourceKey = Rep.SourceKey,
OperationType = (OperationType)Rep.OperationType,
Payload = Rep.Payload,
}).ToList().Take(500);
foreach (var item in Payloads)
{
PayloadData PayloadToSend = new PayloadData()
{
SequenceNo = item.SequenceNo,
SourceType = item.SourceType,
SourceKey = item.SourceKey,
OperationType = item.OperationType,
};
if (!string.IsNullOrEmpty(item.Payload))
PayloadToSend.Payload = GetPayload(item.SourceType, item.Payload);
else
{
string PayloadToSave = GeneratePayload(item.SequenceNo, item.SourceType, item.SourceKey, CRUDAppServices);
PayloadToSend.Payload = GetPayload(item.SourceType, PayloadToSave);
PayloadsToSave.Add(item.SequenceNo, PayloadToSave);
}
PayloadsToSend.Add(PayloadToSend);
PayloadResult obj = new PayloadResult();
obj.result = PayloadsToSend;
List<ConnectedClient> connectedClients = AppStatic.ConnectedClients.Where(p => p.TenantId == generatePayloadAndSendToMobileArgs.TenantId).ToList();
if (connectedClients.Count() > 0 && PayloadsToSend.Count > 0)
{
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
jsonSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
await _iVend365HubContext.Clients.All.SendAsync("GetDeltaQueue", JsonConvert.SerializeObject(obj, jsonSerializerSettings));
}
}
//Delete the Successfully send records
_iVendRepository.ExecuteQuery("Delete From RepReplicationTransactionMobileDetail Where ProcessStatus = 1");
_iVendRepository.ExecuteQuery("Delete From RepReplicationTransactionMobile Where SequenceNo Not In (Select RepReplicationTransactionMobileSequenceNo From RepReplicationTransactionMobileDetail)");
//Save the newely generated Payload in DB
foreach (KeyValuePair<long, string> PayloadToSave in PayloadsToSave)
{
ReplicationTransactionMobile replicationTransactionMobile = _ReplicationTransactionMobileRepository.Get(PayloadToSave.Key);
replicationTransactionMobile.Payload = PayloadToSave.Value;
_ReplicationTransactionMobileRepository.Update(replicationTransactionMobile);
}
unitOfWork.Complete();
}
}
}
catch (Exception ex)
{
}
}
In the above code, at following line, it throws the error, "There is already an open DataReader associated with this Command which must be closed first." Any idea, what could be wrong here?
var Payloads = (from Rep in _ReplicationTransactionMobileRepository.GetAll()
select new
{
SequenceNo = Rep.Id,
SourceType = (RetailObjectId)Rep.SourceType,
SourceKey = Rep.SourceKey,
OperationType = (OperationType)Rep.OperationType,
Payload = Rep.Payload,
}).ToList().Take(500);
Markdown is supported
Copy & paste or drag & drop images (max 30 MB per image)
2 Answer(s)
-
0
Hi,
Please ignore this post...It was my mistake.....solved now....
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
good to know it works ;)
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image)