Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Azure移动服务与Xamarin表单一起使用的正确方法?_Azure_Xamarin_Xamarin.forms_Azure Mobile Services - Fatal编程技术网

将Azure移动服务与Xamarin表单一起使用的正确方法?

将Azure移动服务与Xamarin表单一起使用的正确方法?,azure,xamarin,xamarin.forms,azure-mobile-services,Azure,Xamarin,Xamarin.forms,Azure Mobile Services,通过Xamarin Forms app使用azure移动服务的最佳方式是什么?我正在使用azure移动服务的托管后端版本 这是到目前为止我的项目架构: 应用程序(便携式) 机器人 App.iOS App.WinPhone 除此之外,我还向解决方案添加了2个项目 应用程序服务 是azure移动服务,它不直接用于上述任何项目,而是通过表控制器(Web API)使用 应用程序共享(PCL) 这有我所有的模型类&一个在azureapi之上的包装器。其想法是将此PCL用作可重用的库,我可以在将来的某一天在

通过Xamarin Forms app使用azure移动服务的最佳方式是什么?我正在使用azure移动服务的托管后端版本

这是到目前为止我的项目架构:

应用程序(便携式)

机器人

App.iOS

App.WinPhone

除此之外,我还向解决方案添加了2个项目

应用程序服务

是azure移动服务,它不直接用于上述任何项目,而是通过表控制器(Web API)使用

应用程序共享(PCL)

这有我所有的模型类&一个在azureapi之上的包装器。其想法是将此PCL用作可重用的库,我可以在将来的某一天在任何其他客户机上使用

所有与azure相关的位仅在应用程序共享和本机项目中

此设置与Windows Phone Emulator配合使用效果良好&在本地运行Azure服务

但是,我无法使用Android设备或模拟器访问Azure服务(在本地运行)。它总是立即返回“未经授权”错误

我可以从droid模拟器中运行的浏览器应用程序访问本地运行的服务。我还可以从设备上运行的Chrome应用程序访问此服务

你看我有什么地方不对吗


谢谢

我已经这样做了-基本上你需要在你的Xamarin表单PCL中编写公共访问代码,但是在实际的平台项目中实例化并注册Azure客户端。与仅使用Xamarin服务定位器相比,使用完整的依赖项注入框架(如Autofac)要容易得多

大多数逻辑将在PCL中的一个类中。它应该包含MobileServiceSyncClient的一个依赖项(很抱歉,如果该名称是关闭的,而不是我的代码),这是您将调用GetTable、Update等的实际客户端


然后在iOS或Android项目中构建一些东西——MobileSyncStore,它依赖于SQLite,以及客户端(它不能在PCL中初始化)。将其赋予您的逻辑类,然后注册该逻辑类(在我的代码中,这是AzureStorageService,实现了IMobileServiceClient)。现在,任何需要与服务器对话的类都只需要依赖于IMobileServiceClient,就可以了。

您的表是否受到应用程序密钥的保护?有没有可能安卓版本没有通过某种方式传递这个密钥?没有。我正在尝试访问本地计算机上运行的后端,而不是部署在Azure上。当部署在azure上时,它们都可以正常工作。是的,这是一种方法。这种方法的问题是,我没有得到一个100%自给自足的API包装PCL库,它拥有所有的业务逻辑。这就是我在这里试图实现的想法。如果我必须编写依赖注入,那么我就指望在各个平台上为我做点什么。似乎一旦后端部署到Azure上,一切都会正常工作。只有在本地运行时,从客户端应用程序访问后端时似乎才会出现问题。XF确实有需要特定于平台的代码的项,但是DI允许您将业务逻辑(保留在PCL中)与特定于平台的init分离。在我当前的应用程序中,特定于平台的代码共有5行(init、construct和setup local storage)。