我正在尝试与TFS Online(又名Visual Studio Online)进行一些自动交互。在我的开发机器上编写和测试代码时,这已成功连接:
creds = new Credentials(userName, password);
tfsConfig = TfsConfigurationServerFactory.GetConfigurationServer(new Uri(vsoUrl), creds);
tfsConfig.EnsureAuthenticated();
凭据类:
public class Credentials : ICredentialsProvider
{
string _userName;
string _password;
public Credentials(string userName, string password)
{
_userName = userName;
_password = password;
}
public ICredentials GetCredentials(Uri uri, ICredentials failedCredentials)
{
return new NetworkCredential(_userName, _password);
}
public void NotifyCredentialsAuthenticated(Uri uri)
{
throw new NotImplementedException();
}
}
然后我去部署代码并在服务帐户下运行它,我收到了这个错误:
Microsoft.TeamFoundation.TeamFoundationAuthenticationRedirectionException:TF30064:您无权访问服务器。
在
Microsoft.TeamFoundation.Client.TfsConnection.ThrowAuthorizationException(Exception e)
在
Microsoft.TeamFoundation.Client.TfsConnection.UseCredentialsProviderOnFailure(Action action,Int32 retries,Boolean throwOnFailure)...
因此,经过大量尝试的解决方案后,我尝试在本地开发机器测试中输入不正确的密码' ,它仍然连接正常!所以我只能假设我没有在代码中正确设置凭据,成功的本地测试是因为我已经在Visual Studio中连接。
任何人都可以理解这一点或发现我做错了吗?
答案 0 :(得分:0)
我认为它在您的开发计算机上运行的原因是因为您的有效creadentials已经缓存,因此根本不会调用您的CredentialsProvider。
采用ICredentialsProvider的TfsConfigurationServer构造函数在MSDN documentation中标记为已废弃。我建议使用ICredentials作为输入的那个(here)。代码如下所示:
var userCreds = new NetworkCredential(userName, password);
var tfsServer = new TfsConfigurationServer(new Uri(vsoUrl), userCreds);
tfsServer.EnsureAuthenticated();
另一种选择是使用TfsTeamProjectCollection class而不是TfsConfigurationServer。