Azure移动应用 - 快速入门问题

4
我已经从Azure移动应用程序下载了Xamarin.Forms QuickStart项目(服务器和客户端),然后发布了服务器项目,目前为止一切顺利,但是我无法访问表控制器,除非按照描述添加查询字符串。请注意保留HTML标记。

http://myservice.azurewebsites.net/tables/todoitem?ZUMO-API-VERSION=2.0.0

如果我在门户中将ms_skipversioncheck设置为true,可能与服务器或客户端版本不一致有关。即使我更新了所有的nuget包,仍然会收到BadRequest(400)的错误提示。但是对于上述服务器,在运行客户端项目(Visual Studio中的Android模拟器)时,在非同步模式下可以正常工作。一旦我下载了nuget sqlite localstore并取消注释以下行://#define OFFLINE_SYNC_ENABLED,并将此行await RefreshItems(true, syncItems: true);用于启用离线模式,则仅收到BadRequest(400)的错误提示。我不知道应该检查哪些内容以使版本兼容。我没有包含堆栈跟踪或日志,因为BadRequest是我收到的唯一信息。如果您需要进一步的信息,请告诉我。谢谢。编辑:我查看了这个链接,但是无法解决我的问题。

https://github.com/Azure/azure-content/blob/master/articles/app-service-mobile/app-service-mobile-client-and-server-versioning.md

这让我疯狂

2个回答

3
在400错误请求的主体中,通常会包含一个错误消息。您可以使用Fiddler(http://www.telerik.com/fiddler)或其他Web调试器查看此消息。
示例:
请求 GET http://azielnettest.azurewebsites.net/tables/todoitem 响应 HTTP/1.1 400 Bad Request {"message":"未在请求中指定API版本,此请求需要指定ZUMO-API-VERSION为'2.0.0'。有关更多信息和支持的客户端,请参见:http://go.microsoft.com/fwlink/?LinkId=690568#2.0.0" }

Request http://azielnettest.azurewebsites.net/tables/todoitem?zumo-api-version=2.0.0

响应 200 {数据....}

这是调试的第一步。

第二步是检查:

a) 您部署到站点的服务器项目的packages.config文件。 您应该会找到类似以下内容的东西...

<package id="Microsoft.Azure.Mobile.Server" version="1.0.119.0" targetFramework="net45" />
b) 您的Xamarin Forms项目的packages.config文件。
<package id="Microsoft.Azure.Mobile.Client" version="2.0.1" targetFramework="win81" />

如果你的 Microsoft.Azure.Mobile.Client 版本低于 2.0.0,它将不能与 Azure Mobile App 后端一起使用,因为旧客户端中的标头中未包含 zumo-api-version。
希望这可以帮到你。

谢谢Aziel,快速启动项目的版本与您提到的版本相匹配,并且在未启用离线模式的情况下可以正常运行。一旦我添加了WindowsAzure.MobileServices.SQLiteStore nuget包(没有代码更改),该项目就无法工作,并开始收到错误请求。 - gilberto
1
@gilberto,你尝试过运行Fiddler来查看请求发送到服务时的样子吗?或者,你可以在客户端中添加一个日志处理程序(参见此处的示例LoggingHandler),并检查调试输出。如果它在离线模式下表现不同,那就意味着请求有所不同。 - lindydonna

0

我按照TodoItemManager.cs文件顶部的说明进行了操作。

// 要添加离线同步支持:在解决方案中的所有项目中添加NuGet包WindowsAzure.MobileServices.SQLiteStore, // 并取消注释符号定义OFFLINE_SYNC_ENABLED // 对于Xamarin.iOS,还需编辑AppDelegate.cs并取消注释对SQLitePCL.CurrentPlatform.Init()的调用 // 获取更多信息,请参见:http://go.microsoft.com/fwlink/?LinkId=620342

正确的NuGet包是Microsoft.Azure.Mobile.Client.SQLiteStore,离线模式现在已经可以使用了。

谢谢


刚开始刷新时,启用离线模式是可以正常工作的,但在插入离线数据后(也能正常工作),当尝试推送插入时就无法正常工作了。在客户端尝试推送数据时会出现异常:{"message":"The request is invalid.","modelState":{"item.__version":["An error has occurred."]}},而服务器流日志如下:Error Operation=JsonMediaTypeFormatter.ReadFromStreamAsync, Exception=Newtonsoft.Json.JsonSerializationException: Could not find member '__version' on object of type 'TodoItem'. Path '__version', line 1, position 87。 又卡住了。 - gilberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接