如果使用模拟,TFS WorkItemStore会通过代码访问问题

时间:2017-10-31 16:26:03

标签: c# tfs

当我使用模拟时,我正面临通过C#代码访问TFS WorkItemStore的问题。我正在使用的代码如下:

Uri tfsUri = new Uri("https://localtfsinstance/tfs);
NetworkCredential cred = new NetworkCredential("tfsusername", "tfspassword", "ADDomain");
BasicAuthCredential basicCred = new BasicAuthCredential(cred);
TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred);

TfsConfigurationServer _configurationServer = new TfsConfigurationServer(tfsUri, tfsCred);

ReadOnlyCollection <Microsoft.TeamFoundation.Framework.Client.CatalogNode> _collectionNodes = 
    _configurationServer.CatalogNode.QueryChildren(
    new[] {
    CatalogResourceTypes.ProjectCollection
    }, false, CatalogQueryOptions.None);

Microsoft.TeamFoundation.Framework.Client.CatalogNode collectionNode = _collectionNodes.FirstOrDefault(c => c.Resource.DisplayName == "MyProjCollection");

var tpcId = new Guid(collectionNode.Resource.Properties["InstanceId"]);

var tpc = _configurationServer.GetTeamProjectCollection(tpcId);

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore _wiStore = tpc.GetService<TF_WIT_Client.WorkItemStore>();

我有两个域帐户,两者都对TFS具有相同的权限。如果我使用其中任何一个帐户及其各自的密码,代码就可以正常工作并检索WorkItemStore。

但是,如果我使用第一个域帐户模拟应用程序并使用第二个帐户进行TFS身份验证,则会出现以下错误:

  

发生System.InvalidOperationException HResult = 0x80131509
  消息=未找到集合节点:ProjectCollectionName   'MyProjCollection'

     

内部异常1:COMException:错误HRESULT E_FAIL已经出现   通过调用COM组件返回。

由于编写应用程序的方式,跳过模拟不是一种选择。有没有人在此之前遇到过这个问题和/或知道解决方法?感谢。

1 个答案:

答案 0 :(得分:1)

要使模拟工作,进程正在运行的用户必须具有此集合的“Make requests on behalf of others”权限。如果用户没有此权限,那么您将看到“拒绝访问”错误消息。

因此,请先授予用户“Make requests on behalf of others”权限。

您可以参考以下文章使用TFS模拟: