首先,让我陈述我真正的问题:我有调用 ACS 管理服务的代码,并且我希望我的集成测试能够同时运行,而每个测试运行不会影响其他测试运行。也就是说,由于多个人/构建服务器可能最终同时运行这些测试,如果他们都使用相同的 ACS 服务命名空间,则会出现并发问题。
我的想法是实现这一目标的最简单方法是为每个测试运行程序生成新的、唯一的 ACS 服务命名空间——但据我所知,没有自动创建新服务命名空间(或管理客户端密钥)的方法。我错了吗?还有另一种解决方法吗?
创建新服务命名空间的自动化方法将非常有用。
从技术上讲,这应该是可能的,因为管理门户是一个访问 WCF RIA 服务的 Silverlight 应用程序。
如果你深入挖掘,你会发现一些有用的信息:
这是 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 服务时使用这些凭据。
祝你好运!
你是对的。这在今天是不可能的。也许您可以更详细地描述您的场景,并且可能有一些替代解决方案可以避免重新创建命名空间?