Community.Спасибо, что прочитали мой пост.Я с некоторыми проблемами с API в .Net.У этого API есть 3 Сервиса."PushNotifications", "Register", "PushNotificationRegistration
- PushNotifications: эта служба, не позволяйте мне отправлять Push на все устройства. Предыдущий регистр.
- Регистрация: это новая служба регистрации.
- PushNotificationRegistration: Это старая служба Старого API. Она здесь для сосуществования, в то время как другие приложения не обновлены.
Классы:
public class Subscription
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string ClientId { get; set; }
[StringLength(1000)]
public string Token { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastUpdateDate { get; set; }
public bool IsDeleted { get; set; }
[Index("IX_Device_App", 2, IsUnique = true)]
[ForeignKey("device")]
public string DeviceId { get; set; }
public virtual Device device { get; set; }
[Index("IX_Device_App", 1, IsUnique = true)]
[ForeignKey("app")]
public int AppId { get; set; }
public virtual App app { get; set; }
}
public class App
{
public App()
{
this.Subscriptions = new HashSet<Subscription>();
}
[Key]
public int AppId { get; set; }
public string Name { get; set; }
[JsonIgnore]
public virtual ICollection<Subscription> Subscriptions { get; set; }
}
public class Device
{
public Device()
{
this.Subscriptions = new HashSet<Subscription>();
}
/// <summary>
/// De esta forma utilizo una Key String
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Index(IsUnique = true)]
[Column(TypeName = "nvarchar")]
[StringLength(200)]
public string DeviceId { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastUpdateDate { get; set; }
[JsonIgnore]
public virtual ICollection<Subscription> Subscriptions { get; set; }
}
Методы Знак
public async Task<Crosslayer.GenericReturnValue> Register(Crosslayer.Entities.Dtos.SubscriptionDto request)
public async Task<Crosslayer.GenericReturnValue> PushNotificationRegistration(Crosslayer.Entities.Olds.Subscriptions subscription)
Все методы асинхронные. У меня две проблемы:
1) В момент нахождения подписки я получил полные данные подписки и приложения, но иногда данные устройства не восстанавливались. Я просто добавил присоединение к запросу для решения этой проблемы, но иногда данные устройстваЯ не могу восстановить. Я добавляю (если) для восстановления данных устройства, если в течение короткого времени необходимо установить значение Null
Subscription DbSubscription = await (from s in context.Subscriptions
join app in context.App on s.AppId equals app.AppId
join dev in context.Device on s.DeviceId equals dev.DeviceId
where s.DeviceId == subscription.device.DeviceId &&
s.AppId == subscription.app.AppId
select s).FirstOrDefaultAsync();
foreach (var item in aux)
{
///If for Fix Device return Null
if (item.device == null)
{
item.device = await (from d in context.Device
where d.DeviceId == item.DeviceId
select d).FirstOrDefaultAsync();
}
2) Не каждый раз, но иногда я получаюИсключение невозможно контролировать. Все методы какynchronous и Context Caller с Await.
System.NotSupportedException: вторая операция, запущенная в этом контексте перед завершением предыдущей асинхронной операции.Используйте 'await', чтобы убедиться, что все асинхронные операции завершены, прежде чем вызывать другой метод в этом контексте.Любые члены экземпляра не гарантированно являются потокобезопасными.ru System.Data.Entity.Internal.ThrowingMonitor.EnsureNotEntered () ru System.Data.Entity.Core.Objects.ObjectQuery 1.System.Data.Entity.Infrastructure.IDbAsyncEnumerable<T>.GetAsyncEnumerator() en System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.ForEachAsync[T](IDbAsyncEnumerable
1 источник, действие 1 action, CancellationToken cancellationToken) en System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.ToListAsync[T](IDbAsyncEnumerable
1 источник, CancellationToken cancellationToken) en System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.ToListAsync [T] (источник IDbAsyncEnumerable`1) en PushNotification_NewProject.Controllers.PushNotificationController.d__8.MoveNext () en C: ######### \ Controllers \ PushNoa 71041 *