我使用azure移动服务创建了离线同步选项。一切都很好。我插入了几行,几天后,当我尝试插入表格时,我回到了我的应用程序。我收到错误消息
System.ArgumentException: Set JArray values with invalid key value: "version". Int32 array index expected.
at Newtonsoft.Json.Linq.JArray.set_Item (System.Object key, Newtonsoft.Json.Linq.JToken value) [0x00028] in <filename unknown>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceTable.GetJTokenFromResponse (Microsoft.WindowsAzure.MobileServices.MobileServiceHttpResponse response) [0x00035] in <filename unknown>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceTable+<>c__DisplayClass14+<<InsertAsync>b__13>d__16.MoveNext () [0x000f7] in <filename unknown>:0
--- End of stack trace from previous location where exception was thrown ---
我尝试在todoitem.cs
中添加以下版本属性 [Version]
public byte[] Version { get; set; }
或
[TimeStamp]
public byte[] Version { get; set; }
但两种情况都没有帮助我。我只有在尝试插入时才会收到错误。读数据很好。它是否期待我设置一些东西。我认为它是在新行插入期间自动分配的,仅用于验证服务器和客户端之间的行数据版本。
更新:我改变的是在它工作之后,我将架构权限更改为每个操作的“仅经过身份验证的用户”,并且还添加了google身份验证,之后无论我做什么,我都会一直收到此错误。我清理了本地sqlite和azure上的表,但它甚至没有帮助。
答案 0 :(得分:1)
最后挣扎了整整两天我找出了问题所在。在创建MobileServiceClient时,我必须在mobileApiUrl中使用https。这在我没有在插入和更新上使用任何身份验证之前工作正常但是一旦我添加了google和facebook的身份验证,我开始收到此错误,尽管读取查询仍然有效。我不知道它背后的原因是什么,但从http到https的变化就像一个魅力。
MobileService = new MobileServiceClient(Url);