将Azure MobileServices库与我自己的LAN WebApi

时间:2015-06-08 15:30:22

标签: azure mobile asp.net-web-api xamarin azure-mobile-services

我目前正在为我们公司开发一个应该支持离线数据同步(在iPad上)的移动应用程序。我们已经探索了许多可能性,包括PhoneGap / Cordova,Xamarin以及简单的原生iOS开发。 Xamarin,由于许多不同的原因,似乎是我们的最佳选择,所以我的问题将假设我们将在Xamarin中发展。

我正在寻找一个用于管理离线数据同步的库,最明显的解决方案是Microsoft Azure MobileServices。但是,我的公司是加拿大人,显然很难(合法地)将我们的数据信任到美国的云端。由于我们已经在内部部署了内部WebApi,因此我认为可能有一种方法可以将MobileServices库指向我们自己的WebApi。我已经阅读了Azure Hybrid Connection的可能性,但我们的数据仍然可能通过Microsoft服务器传达。所以,我的问题是:

有没有办法将Microsoft.WindowsAzure.MobileServices Client library配置为直接指向我们的Intranet,RESTful WebApi后端,而无需通过任何Microsoft Azure服务器?

据我所知,为了能够无缝地使用客户端库,我们可能需要调整WebApi来实现必要的.net后端接口。我主要想知道是否有可能因为MSDN documentation on the libraries似乎都指向与服务器的直接连接(没有可能配置自己的连接字符串)并且所有指令都将您重定向到他们的Azure Mobile Services website。 / p>

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您查看移动客户端的API,您会注意到Azure移动服务客户端SDK仅关注两件事:

new AzureMobileClient( url, appkey)

...托管的地方不应该是一个问题。其他一切都只是配置。

如果您想在自己的服务器上托管Azure移动服务后端,从技术上讲,您可以这样做,但可能会有一些注意事项。 Microsoft has announced that they will be launching a Canadian Azure data center,但直到2016年我们才会看到它。

与此同时,以下是您在本地托管服务的方式。请注意,我没有尝试模拟Azure移动服务(又名Zumo)的所有功能,因此您的里程数(或千兆位数)会有所不同。

本地托管:

从技术可行性来看,您绝对可以在本地运行这些服务。我知道这一点是因为您可以在Visual Studio中创建Azure移动服务后端项目并在本地运行以进行开发。这是我们的开发团队为测试其移动应用程序所做的工作。

请注意,您可以直接从Visual Studio中创建Azure移动服务后端:新项目 - >云 - > Azure移动服务。您还可以直接从Azure仪表板下载完全相同的模板(预先配置了您的URL和ApplicationKey):创建 - >移动服务。

显然,如果您在服务器上托管它,您可以自行配置并使用适合您网站的SSL证书。

ZUMO Permissions:

默认情况下,服务器上的安全角色已关闭。因此,如果您使用[AuthorizeLevel]属性锁定任何方法,则在运行时将忽略这些设置。如果您需要启用此功能,可以修改WebApiConfig.Register()方法并将网站标记为自托管:config.SetSelfHosted(true)

<强>配置:

从配置角度来看,Azure移动服务仪表板提供了几个用于配置身份,推送通知,连接字符串和应用程序设置的选项卡。遗憾的是,您没有仪表板,但所有这些设置在本地web.config中都有相应的值。您在此处提供的任何值都会在Azure中自动覆盖,但在本地运行时会使用它们。

此处列出了您需要配置的最低设置。您可以使用ZuMo客户端分发ApplicationKey,但MasterKey用于管理员授权级别,因此您需要保留该秘密。 EntityFramework使用MobileServiceName作为您的数据库架构以及站点URL中显示的内容。

<add key="MS_MobileServiceName" value="myzumosite" /> <add key="MS_MasterKey" value="masterkey" /> <add key="MS_ApplicationKey" value="appkey" />

MS _ 前缀开头的值映射到Azure门户中的相应值。例如, MS_GoogleClientID MS_GoogleClientSecret 会映射到信息中心中的Google身份标识值。

AppSettings节点中的任何其他值都可以通过ApiServices.Settings属性立即访问,并且对应于Azure仪表板中的“设置”节点。

数据库连接字符串继续存在于connectionStrings节点中。对于azure通知中心也是如此。

<强>数据库:

显然,您配置的数据库也取决于您。权限和用户帐户也很明显。您需要担心的Entity Framework数据库迁移脚本的SQL Azure语法之间可能存在一些细微差别。 (我发现数据库迁移脚本无法在程序包管理器中运行,但在网站启动时运行数据库脚本时它们可以正常工作)

<强>注意事项:

  • 您不会有一个很好的仪表板来监控您的网站性能,查看日志或更改运行时设置
  • 您将无法立即扩展您的网站;缩放和部署将是您的问题
  • 部署配置是您的责任(项目 - &gt;除非您进行配置,否则将无法发布)
  • 不确定您是否能够将Azure Active Directory用作身份验证方案,但不会引起关注。您可以编写自己的身份验证提供程序:Microsoft的Zumo库仅支持少数几个,但Microsoft使用的基础Owin.Security包支持数十个系统!
  • 您的网站需要向您的移动客户公开显示
  • 推送通知应该有效,但您将使用Azure的通知中心。
  • 我不知道ApiServices.Log会去哪里

最简单的方法是:

  1. 在Azure中创建移动服务以获取预配置的通知中心和设置
  2. 从信息中心下载入门网站
  3. 配置此处提到的web.config。

答案 1 :(得分:0)

不可能简单地配置WAMS客户端库以使用您自己的WebApi后端。 但是WAMS库可以在github上找到,所以我相信你可以重用WAMS项目中的很多代码,特别是如果你想使用PCL项目的话。 要通过Azure安全地路由您的数据,您可以考虑设置快速路由。此外,对于上周的更新,可以将自定义域应用于WAMS后端,包括您自己的证书以保护您的连接。