如果您查看移动客户端的 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 仪表板中的 Settings 节点。
数据库连接字符串继续存在于connectionStrings 节点中。 azure 通知中心也是如此。
数据库:
显然,您配置的数据库也将取决于您。权限和用户帐户也很明显。您需要担心的实体框架数据库迁移脚本的 SQL Azure 语法之间可能存在一些细微差别。 (我发现数据库迁移脚本在包管理器中不起作用,但是当您的网站启动时运行数据库脚本时它们确实起作用)
注意事项:
- 您不会有一个漂亮的仪表板来监控您的网站性能、查看日志或更改运行时设置
- 您将无法立即扩展您的站点;扩展和部署将是您的问题
- 部署配置是您的责任(项目 -> 发布将不可用,除非您配置它)
- 不确定您是否能够将 Azure Active Directory 用作身份验证方案,但从听起来这不会是一个问题。您可以编写自己的身份验证提供程序:微软的 Zumo 库只支持少数几个,但微软使用的底层 Owin.Security 包支持几十个系统!
- 您的网站需要对您的移动客户端公开可见
- 推送通知应该可以工作,但您将为此使用 Azure 的通知中心。
- 我不知道 ApiServices.Log 会去哪里
最简单的方法是:
- 在 Azure 中创建移动服务以预配置通知中心和设置
- 从仪表板下载起始站点
- 按照此处所述配置 web.config。