【问题标题】:Using Azure MobileServices library with my own LAN WebApi将 Azure MobileServices 库与我自己的 LAN WebApi 一起使用
【发布时间】:2015-06-08 15:30:21
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案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 权限:

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

    配置:

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

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

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

    MS_ 前缀开头的值映射到 Azure 门户中的相应值。例如,MS_GoogleClientIDMS_GoogleClientSecret 映射到仪表板中的 Google 身份值。

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

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

    数据库:

    显然,您配置的数据库也将取决于您。权限和用户帐户也很明显。您需要担心的实体框架数据库迁移脚本的 SQL Azure 语法之间可能存在一些细微差别。 (我发现数据库迁移脚本在包管理器中不起作用,但是当您的网站启动时运行数据库脚本时它们确实起作用)

    注意事项:

    • 您不会有一个漂亮的仪表板来监控您的网站性能、查看日志或更改运行时设置
    • 您将无法立即扩展您的站点;扩展和部署将是您的问题
    • 部署配置是您的责任(项目 -> 发布将不可用,除非您配置它)
    • 不确定您是否能够将 Azure Active Directory 用作身份验证方案,但从听起来这不会是一个问题。您可以编写自己的身份验证提供程序:微软的 Zumo 库只支持少数几个,但微软使用的底层 Owin.Security 包支持几十个系统!
    • 您的网站需要对您的移动客户端公开可见
    • 推送通知应该可以工作,但您将为此使用 Azure 的通知中心。
    • 我不知道 ApiServices.Log 会去哪里

    最简单的方法是:

    1. 在 Azure 中创建移动服务以预配置通知中心和设置
    2. 从仪表板下载起始站点
    3. 按照此处所述配置 web.config。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多