Я разрабатываю приложение Windows Phone 8 с помощью Windows Azure Mobile Services.Недопустимый сквозной доступ Windows Azure
У меня есть следующий код:
private async void appBarButton1_Click(object sender, EventArgs e)
{
var table = App.MobileService.GetTable<ChatRoomOverview.chatrooms>();
//TODO
List<ChatRoomOverview.chatrooms> ChatRooms = await table.Where(chat => chat.chatroomName == ChatroomName.Text).ToListAsync();
if (ChatRooms.Count() < 1)
{
ChatRoomOverview.chatrooms ChatRoom = new ChatRoomOverview.chatrooms { chatroomName = ChatroomName.Text, Created = DateTime.Today.Date.ToString(), content = ChatRoomOverview.userName + "|:::|" + FirstPost.Text + "|::|::|", LastPost = FirstPost.Text + "|::|::|", tag1 = tag1.Text, tag2 = tag2.Text, tag3 = tag3.Text, isPrivate = isPrivateCheck.IsChecked.Value, userName = ChatRoomOverview.userName, Popular = "0" };
await table.InsertAsync(ChatRoom);
long tempID =ChatRoom.Id;
await subscripeToNewChatRoom(tempID);
NavigationService.Navigate(new Uri("/ChatRoomOverview.xaml", UriKind.Relative));
}
else
{
MessageBox.Show("This Chatroom is allready created go to Search and check it out :)", "Chatroom Exists!", MessageBoxButton.OK);
}
}
выше код excuted когда пользователь хочет создать комнату. Здесь все работает. Но в моей новой итерации приложения я хочу реализовать pushnotification, и поэтому я хочу использовать таблицу подписок. Это введено в функции subscripeToNewChatRoom. Его переменной является выданный идентификатор для чата, указанный при вставке элемента чата. Это значение существует и является правильным.
private System.Threading.Tasks.Task subscripeToNewChatRoom(long tempID)
{
ChatRoomOverview.Subscription Subscription = new ChatRoomOverview.Subscription { ContentID = Convert.ToInt32(tempID), userId = App.UserInfromationID };
**ERROR** App.MobileService.GetTable<ChatRoomOverview.Subscription>().InsertAsync(Subscription);
return null;
}
Приведенный выше код затем предлагается для вставки подписки. Этот код работает с другими местами в коде, поэтому я не понимаю, что такое ошибка. Но ошибка возникает там, где я написал ошибку в коде. Полное исключение находится в нижней части вопроса.
Так что я не понимаю, почему я понимаю, почему я получаю недопустимый сквозной доступ?
Дополнительный Хорошо, поэтому на основе ответа и комментариев Jaihind я придумал код ниже. И теперь я могу видеть, что таблицы, с которыми я взаимодействую, получают правильные данные. Бууут, я все еще получаю исключение.
private async void bwSubscription_DoWork(object sender, DoWorkEventArgs e)
{
List<object> genericlist = e.Argument as List<object>;
var table = await App.MobileService.GetTable<ChatRoomOverview.chatrooms>();
//List<ChatRoomOverview.chatrooms> ChatRooms = table.Where(chat => chat.chatroomName == ChatroomName.Text)
//table.InsertAsync(ChatRoom);
ChatRoomOverview.chatrooms chat = (ChatRoomOverview.chatrooms)genericlist[0];
//var ChatRoom = table.Where(chatting => chatting.chatroomName == chat.chatroomName).ToListAsync();
long tempID = chat.Id;
ChatRoomOverview.Subscription Subscription = new ChatRoomOverview.Subscription { ContentID = tempID, userId = App.UserInfromationID };
await App.MobileService.GetTable<ChatRoomOverview.Subscription>().InsertAsync(Subscription);
}
Но при вставке TRY/поймать, чтобы обработать исключение, которое не произойдет, то элемент не будет вставлен в лазурном таблице.
Рабочий раствор
private async void bwSubscription_DoWork(object sender, DoWorkEventArgs e)
{
bool subscriped = false;
List<object> genericlist = e.Argument as List<object>;
var table = App.MobileService.GetTable<ChatRoomOverview.chatrooms>();
//List<ChatRoomOverview.chatrooms> ChatRooms = table.Where(chat => chat.chatroomName == ChatroomName.Text)
//table.InsertAsync(ChatRoom);
ChatRoomOverview.chatrooms chat = (ChatRoomOverview.chatrooms)genericlist[0];
//var ChatRoom = table.Where(chatting => chatting.chatroomName == chat.chatroomName).ToListAsync();
long tempID = chat.Id;
while (!subscriped)
{
try
{
ChatRoomOverview.Subscription Subscription = new ChatRoomOverview.Subscription { ContentID = tempID, userId = App.UserInfromationID , Notifications = 0};
await App.MobileService.GetTable<ChatRoomOverview.Subscription>().InsertAsync(Subscription);
}
catch
{
}
List<ChatRoomOverview.Subscription> subscript = await App.MobileService.GetTable<ChatRoomOverview.Subscription>().Where(subs => subs.ContentID == tempID && subs.userId == App.UserInfromationID && subs.Notifications == 0).ToListAsync();
if (subscript.Count > 0)
{
ChatRoomOverview.userName = "";
subscriped = true;
}
else
{
subscriped = false;
}
}
}
Мой Exception в полном
- $ исключение {System.UnauthorizedAccessException: Invalid доступа кросс-нить. в MS.Internal.XcpImports.CheckThread() в MS.Internal.XcpImports.MessageBox_ShowCore (String messageBoxText, Строка заголовка, типа UInt32) в System.Windows.MessageBox.ShowCore (String messageBoxText, Струнный подпись, кнопка MessageBoxButton) на System.Windows.MessageBox.Show (String messageBoxText) в ChatRoom.App.CurrentChannel_ShellToastNotificationReceived (Object отправителя, NotificationEventArgs е) в Microsoft.Phone.Notification.ShellObjectChannelInternals.OnNotificationReceived (IntPtr сгустка, UInt32 blobSize) в Microsoft.Phone. Notification.ShellObjectChannelInternals.ChannelHandler (UInt32 eventType, IntPtr blob1, UInt32 blobSize1, IntPtr blob2, UInt32 blobSize2) в Microsoft.Phone.Notification.HttpNotificationChannel.Dispatch (Object thr eadContext) в System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (состояние объекта) на System.Threading.ExecutionContext.RunInternal (ExecutionContext ExecutionContext, ContextCallback обратного вызова, объект состояния, логическое preserveSyncCtx) на System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx) на System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() на System.Threading.ThreadPoolWorkQueue.Dispatch() в System.Threading._ThreadPoolWaitCallback.PerformWaitCallback)} системы (.Exception {System.UnauthorizedAccessException}
Я не понимаю, что это имеет отношение к Azure. Столбец в исключении явно указывает, что фоновому потоку было предложено показать окно сообщения. Отображение окна сообщения должно выполняться из потока графического интерфейса пользователя. –