1

我有一个 azure 移动服务,它会在某个时候上线。所以我需要创建指向 UAT 和 dev 数据库的 UAT 和 dev 版本。我正在努力解决的是如何创建这些。

我的 live、UAT 和 Dev 数据库中的命名空间需要相同,但如果我创建一个名为 myAppName_UAT 的新移动服务,它将希望使用 MyAppName_UAT 作为命名空间,因此找不到任何表。

有没有人克服这个问题?产品上线后,我需要能够针对 Dev db 测试移动应用程序而不影响实时,这肯定是一个常见的场景?

我们将非常感激地收到任何建议。

编辑:我特别关注的是如何管理 Azure 门户中的多个环境。我可以部署我的 UAT 环境的所有其他组件,但我被困在移动服务上。

我不是在要求我的应用程序切换配置文件或在数据库之间迁移数据的方法。有没有人在运行多个移动服务的情况下运行具有多个组件的 azure 应用程序的经验?

4

2 回答 2

1

你使用版本控制吗?对我来说,你只需要创建分支来分隔“UAT”和“dev”版本。

关于数据库:

您可以使用 web.config 转换在数据库之间切换连接字符串。

http://msdn.microsoft.com/en-us/library/dd465326.aspx

如何在我的连接字符串上使用 Web.Config 转换?

=================================================================================

更新:

好的,现在我明白你想要什么了。

创建两个版本的移动服务:

1-Log in Windows Azure Management Portal (http://manage.windowsazure.com)
2-Create your test mobile services (if you already have then, skip this step):
  2.1- New -> Compute -> Mobile Services
  2.2- Url - MyMobileServicesTest
  2.3- Database -> Create a new (test db).

3-Create your production mobile services (if you already have then, skip this step):
  2.1- New -> Compute -> Mobile Services
  2.2- Url - MyMobileServicesProduction
  2.3- Database -> Create a new (production db).

现在,您有两个不同的版本。

使用 Windows Azure SDK:

//public static MobileServiceClient MobileService = new MobileServiceClient( 
//    "AppUrl", 
//    "AppKey" 
//);

请注意:AppUrl 将是“MyMobileServicesTest.azure-mobile.net/”或“MyMobileServicesProduction.azure-mobile.net/”。应用程序密钥,每个环境都有自己的。您可以将此设置存储在配置文件中,并根据您的操作进行切换。

更多信息:

http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-data-dotnet/

于 2013-09-27T11:35:40.807 回答
0

多个移动服务可以共享同一个数据库。您只需在每个移动服务的 web.config 中指定相同的架构名称:

<appSettings>    
  <add key="MS_MobileServiceName" value="MyAppName" />
</appSettings>

更新:

上面的设置只在 localhost 中有效,但在发布到 live 后无效。需要执行以下技巧才能使其工作。只需将模式名称硬编码到 functionOnModelCreating中。这样,数据库模式名称将不再依赖于移动服务名称:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   string schema = "MyAppName"; // ServiceSettingsDictionary.GetSchemaName();
   if (!string.IsNullOrEmpty(schema))
   {
       modelBuilder.HasDefaultSchema(schema);
   }

   modelBuilder.Conventions.Add(
          new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
         "ServiceTableColumn", (property, attributes) => attributes.Single().ColumnType.ToString()));
}   
于 2015-03-03T15:34:35.567 回答