【问题标题】:Can ACS Service Namespace creation be automated?ACS 服务命名空间创建是否可以自动化?
【发布时间】:2012-08-07 19:33:53
【问题描述】:

首先,让我说明我的真正问题:我有调用 ACS 管理服务的代码,我希望我的集成测试能够同时运行,而无需每个试运行重创了其他人。也就是说,由于多个人/构建服务器可能最终同时运行这些测试,如果他们都使用相同的 ACS 服务命名空间,则会出现并发问题。

我的想法是实现这一点的最简单方法是为每个测试运行程序生成新的、唯一的 ACS 服务命名空间——但据我所知,没有自动创建新服务命名空间(或管理客户端密钥)的方法)。我错了吗?有没有其他方法可以解决这个问题?

创建新服务命名空间的自动化方法会非常有用。

【问题讨论】:

  • 我认为包含对服务的实际调用是单元测试中的一般错误。您是在测试您的代码,还是在测试 ACS 服务?如果你正在测试你的代码,最好的选择是模拟一些东西。现在我找不到最好的模拟点,但是针对实时网络/任何服务运行测试似乎不像测试代码,而是测试服务。你的测试失败的原因有很多,这不是你的代码的问题。想象一下失去互联网连接,想象一下临时服务不可用,想象一下网络超时,等等......
  • @astaykov 在他的问题中他指的是集成测试而不是单元测试
  • Astaykov,正如 Sandrino 所指出的,我说的是集成测试,而不是单元测试。所以,就像在其他形式的集成测试中你使用真实的,但不是生产数据库(想想使用 SQLite 而不是你的真实 SQL Server 实例来测试你所有的数据库调用/orm 映射/等),我正在使用真正的 ACS 服务命名空间,只是不是真正的生产命名空间,因为不幸的是,没有 ACSLite :)。

标签: azure wif acs


【解决方案1】:

你是对的。这在今天是不可能的。也许您可以更详细地描述您的场景,并且可能有一些替代解决方案可以避免重新创建命名空间?

【讨论】:

  • 我的场景特别是我使用 ACS 作为多个身份提供者的联合提供者,并且我正在编写工具的一部分,允许管理员添加他们的身份提供者信息作为我的服务的入职/管理流程。因此,我已经编写了调用所有 ACS 管理服务 API 内容和相关集成测试的代码。如果它们同时运行,只是试图防止集成测试相互交叉。
【解决方案2】:

技术上应该可以,因为管理门户是一个 Silverlight 应用程序访问 WCF RIA 服务。

如果你深入挖掘,你会发现一些有用的信息:

这是 DomainContext 的一部分:

  public sealed class AppFabricDomainContext : DomainContext
  {

    public AppFabricDomainContext(Uri serviceUri)
      : this((DomainClient) new WebDomainClient<AppFabricDomainContext.IAppFabricDomainServiceContract>(serviceUri, true))
    {
    }

    ...

    public InvokeOperation CreateServiceNamespace(IEnumerable<string> serviceNames, string parentProjectKey, string serviceNamespace, IEnumerable<string> packageKeys, string regionKey, Action<InvokeOperation> callback, object userState)
    {
      Dictionary<string, object> dictionary = new Dictionary<string, object>();
      dictionary.Add("serviceNames", (object) serviceNames);
      dictionary.Add("parentProjectKey", (object) parentProjectKey);
      dictionary.Add("serviceNamespace", (object) serviceNamespace);
      dictionary.Add("packageKeys", (object) packageKeys);
      dictionary.Add("regionKey", (object) regionKey);
      this.ValidateMethod("CreateServiceNamespace", (IDictionary<string, object>) dictionary);
      return this.InvokeOperation("CreateServiceNamespace", typeof (void), (IDictionary<string, object>) dictionary, true, callback, userState);
    }
  }

查找此信息很容易,让它发挥作用……那是另一回事。以身份验证部分为例,您需要使用 Windows Live 进行身份验证,并在调用 WCF RIA 服务时使用这些凭据。

祝你好运!

【讨论】:

  • 哈,哇,我没有考虑打开 xap 来查看管理门户实际在做什么,非常聪明,Sandrino。也就是说,我不得不想象这不是 supported 场景:)
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
相关资源
最近更新 更多