将 Azure MobileServices 库与我自己的 LAN WebApi 结合使用
Using Azure MobileServices library with my own LAN WebApi
我目前正在研究为我们公司开发一款支持离线数据同步的移动应用程序(在 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 all seem to point to direct connections to their servers (no possibilities to configure your own connection strings) and all instructions redirect you to their Azure Mobile Services website.
谢谢。
无法简单地将 WAMS 客户端库配置为与您自己的 WebApi 后端一起使用。
但是 WAMS 库在 github 可用,所以我相信您可以重用 WAMS 项目中的大量代码,尤其是如果您想使用 PCL 项目。
要通过 Azure 安全地路由你的数据,你可以考虑设置快速路由。此外,对于上周的更新,可以将自定义域应用于 WAMS 后端,包括您自己的证书以保护您的连接。
如果您查看移动客户端的 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_GoogleClientID 和 MS_GoogleClientSecret 映射到仪表板中的 Google 标识值。
AppSettings 节点中的任何其他值都可以通过 ApiServices.Settings 属性 立即访问,并且对应于 Azure 仪表板中的设置节点。
数据库连接字符串继续存在于 connectionStrings
节点中。 Azure 通知中心也是如此。
数据库:
显然,您配置的数据库也将取决于您。权限和用户帐户也很明显。您需要担心的 SQL 用于 Entity Framework 数据库迁移脚本的 Azure 语法之间可能存在一些细微差别。 (我发现数据库迁移脚本在程序包管理器中不起作用,但当您的网站启动时数据库脚本为 运行 时它们会起作用)
注意事项:
- 您将没有一个很好的仪表板来监控您网站的性能、查看日志或更改运行时间设置
- 您将无法立即扩展您的网站;扩展和部署将是你的问题
- 部署配置由您负责(项目 -> 发布将不可用,除非您配置它)
- 不确定您是否能够将 Azure Active Directory 用作身份验证方案,尽管听起来这不是问题。您可以编写自己的身份验证提供程序:微软的 Zumo 库只支持少数几个,但微软使用的底层 Owin.Security 包支持几十个系统!
- 您的网站需要对您的移动客户端公开可见
- 推送通知应该可以工作,但您将为此使用 Azure 的通知中心。
- 我不知道ApiServices.Log会去哪里
最简单的方法是:
- 在 Azure 中创建移动服务以获取预配置的通知中心和设置
- 从仪表板下载入门站点
- 按照此处所述配置 web.config。
我目前正在研究为我们公司开发一款支持离线数据同步的移动应用程序(在 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 all seem to point to direct connections to their servers (no possibilities to configure your own connection strings) and all instructions redirect you to their Azure Mobile Services website.
谢谢。
无法简单地将 WAMS 客户端库配置为与您自己的 WebApi 后端一起使用。 但是 WAMS 库在 github 可用,所以我相信您可以重用 WAMS 项目中的大量代码,尤其是如果您想使用 PCL 项目。 要通过 Azure 安全地路由你的数据,你可以考虑设置快速路由。此外,对于上周的更新,可以将自定义域应用于 WAMS 后端,包括您自己的证书以保护您的连接。
如果您查看移动客户端的 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_GoogleClientID 和 MS_GoogleClientSecret 映射到仪表板中的 Google 标识值。
AppSettings 节点中的任何其他值都可以通过 ApiServices.Settings 属性 立即访问,并且对应于 Azure 仪表板中的设置节点。
数据库连接字符串继续存在于 connectionStrings
节点中。 Azure 通知中心也是如此。
数据库:
显然,您配置的数据库也将取决于您。权限和用户帐户也很明显。您需要担心的 SQL 用于 Entity Framework 数据库迁移脚本的 Azure 语法之间可能存在一些细微差别。 (我发现数据库迁移脚本在程序包管理器中不起作用,但当您的网站启动时数据库脚本为 运行 时它们会起作用)
注意事项:
- 您将没有一个很好的仪表板来监控您网站的性能、查看日志或更改运行时间设置
- 您将无法立即扩展您的网站;扩展和部署将是你的问题
- 部署配置由您负责(项目 -> 发布将不可用,除非您配置它)
- 不确定您是否能够将 Azure Active Directory 用作身份验证方案,尽管听起来这不是问题。您可以编写自己的身份验证提供程序:微软的 Zumo 库只支持少数几个,但微软使用的底层 Owin.Security 包支持几十个系统!
- 您的网站需要对您的移动客户端公开可见
- 推送通知应该可以工作,但您将为此使用 Azure 的通知中心。
- 我不知道ApiServices.Log会去哪里
最简单的方法是:
- 在 Azure 中创建移动服务以获取预配置的通知中心和设置
- 从仪表板下载入门站点
- 按照此处所述配置 web.config。