【问题标题】:Unable to connect to my Tfs server from c# code无法从 C# 代码连接到我的 Tfs 服务器
【发布时间】:2012-09-07 15:45:07
【问题描述】:

我们正在尝试使用 TeamFoundationServer .net 控件在 c# 中对我们托管的 TFS service account 进行身份验证,这是我的代码:

NetworkCredential tfsCredential = new NetworkCredential(username, password);
TeamFoundationServer tfsServer = new TeamFoundationServer(tfsAddress, tfsCredential);

tfsServer.Authenticate();

请注意,这不是本地 TFS 服务器,它是位于 tfspreview.com 的托管 TFS 服务,我们尝试使用 Windows Live 帐户和备用身份验证凭据登录,但每个当我们尝试进行身份验证时,Internet Explorer 在新窗口中打开并要求提供凭据。

如果我们使用 IE 提示符连接它可以工作,但我们希望存储凭据并连接到服务器,而不是每次都询问凭据,

【问题讨论】:

    标签: c# tfs credentials azure-devops


    【解决方案1】:

    您可以在个人资料下配置基本身份验证,也可以使用服务凭据。这完全取决于您需要什么样的权限。基本身份验证在用户帐户下运行,这往往是一种不好的做法,而服务帐户具有提升的权限。

    为 TF 服务配置基本身份验证

    对于基本用户身份验证,您应该连接到 TF 服务并按照指示打开您的个人资料。您的个人资料上有一个“凭据”选项卡,可让您配置这些凭据。这对于通过 API 进行每个/用户访问很有用,但如果您想通过服务器或服务运行事物,则不好。

    检索 TFS 服务凭据

    我创建了一个名为 TFS Service Credential Viewer 的应用程序,它允许您检索 TF 服务实例的服务凭据。这与您在本地配置构建和测试服务器以针对云工作时所做的相同。

    我希望这会有所帮助...

    【讨论】:

      【解决方案2】:

      您可以尝试使用基于服务器模拟的代码

      var serverUrl  = "";
      
      ICredentials credentials = new NetworkCredential(username, password, domain);
      ICredentialsProvider TFSProxyCredentials = new NetworkCredentialsProvider(credentials);
      
      TfsTeamProjectCollection currentCollection = new TfsTeamProjectCollection(new Uri(serverUrl), credentials);
      
      
      // Get the TFS Identity Management Service
      IIdentityManagementService identityManagementService = currentCollection.GetService<IIdentityManagementService>();
      // Look up the user that we want to impersonate
      TeamFoundationIdentity identity = identityManagementService.ReadIdentity(IdentitySearchFactor.AccountName, username, MembershipQuery.None, ReadIdentityOptions.None);
      
      
      // Open collection impersonated
      TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(serverUrl), credentials, TFSProxyCredentials, identity.Descriptor);
      
      //For example we can access to service WorkItemStore 
      var workItemStore = tfs.GetService<WorkItemStore>();
      

      【讨论】:

      • 它仍然提示一个 ie 窗口询问我的凭据。执行此操作的第一个操作是`currentCollection.GetService();`。这是正常的还是我的凭据在我的代码中无法正常工作,它不应该做任何提示。
      • 我认为您的凭据有问题
      • 这当然是合乎逻辑的推论,但如果我在提示符中输入它们,相同的凭据可以正常工作
      • 同时检查您的域名和网址
      【解决方案3】:

      Tfspreview.com 现在支持基本身份验证,这将完全消除 IE 的显示。有关如何为您的 tfspreview.com 进行设置并使用您配置的用户名和密码的详细信息,请参阅 here

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多