【问题标题】:Azure Mobile app - QuickStart troubleAzure 移动应用 - 快速入门问题
【发布时间】:2016-05-22 13:05:32
【问题描述】:

我已经从 azure 移动应用程序下载了 Xamarin.Forms 快速入门项目(服务器和客户端),然后发布了服务器项目,到目前为止一切顺利,但我无法访问表控制器,除非我按照描述添加查询字符串。

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

或者如果我在门户中将 ms_skipversioncheck 添加为 true。

可能与服务器或客户端版本差异有关。

即使我更新了所有 nuget 包,同样的事情,只是收到 BadRequest (400)

但是使用上述服务器,当我运行客户端项目(Visual Studio 中的安卓模拟器)时,它在不同步模式下工作正常。

一旦我下载了 nuget sqlite localstore 并取消注释该行:

//#define OFFLINE_SYNC_ENABLED

并制作这一行: 等待 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

它让我发疯

【问题讨论】:

    标签: azure mobile azure-mobile-services


    【解决方案1】:

    在 400 bad request response 的正文中,通常包含一条错误消息。 您可以使用 Fiddler (http://www.telerik.com/fiddler) 或其他 Web 调试器查看此内容。

    例子:

    请求 获取http://azielnettest.azurewebsites.net/tables/todoitem

    响应 HTTP/1.1 400 错误请求 {"message":"请求中没有指定API版本,这个请求需要指定一个'2.0.0'的ZUMO-API-VERSION。更多信息和支持的客户端见:http://go.microsoft.com/fwlink/?LinkId=690568#2.0.0"}

    请求 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 移动应用后端,因为 zumo-api-version 不包含在旧客户端的标头中。

    希望这会有所帮助。

    【讨论】:

    • 感谢 Aziel,快速启动项目的版本与您提到的版本相匹配,并且项目运行正常,无需启用离线模式,一旦我添加 WindowsAzure.MobileServices.SQLiteStore nuget 包(无代码更改),项目不再工作并开始收到错误的请求。
    • @gilberto,您是否尝试过运行 Fiddler 来查看请求发送到您的服务时的样子?或者,您可以向客户端添加日志处理程序(请参阅sample LoggingHandler here)并检查调试输出。如果它在离线模式下表现不同,则意味着请求有所不同。
    【解决方案2】:

    我按照 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."]}} 这是服务器流式传输日志:错误操作=JsonMediaTypeFormatter.ReadFromStreamAsync,异常=Newtonsoft.Json.JsonSerializationException:在“TodoItem”类型的对象上找不到成员“__version”。路径“__version”,第 1 行,位置 87。再次卡住。
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 2018-04-03
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多