【发布时间】:2019-09-13 10:50:57
【问题描述】:
亲爱的
请帮我解决 VS 插件 Tfs 连接问题。
我编写了 VS 2017 插件,它使用 TfsTeamProjectCollection 类连接到 tfs 服务器。 Tfs 服务器托管在https://dev.azure.com
但在某些计算机上,它无法连接到 Tfs 服务器。 例如,我试图重现这一点并清除所有缓存,如here 所述。清除/连接几个周期后,我得到以下信息:
- VS Team Explorer 已连接到 Tfs。我可以签出/签入文件、加载历史记录等。
- 我的加载项连接失败,出现 401 非授权错误。
- 由 VS 启动的统一测试能够使用相同的代码连接到相同的 Tfs
- 我创建了示例控制台应用程序,它使用与加载项完全相同的类和方法进行连接,并且它也可以工作。
这是我用来连接的源代码:
public override TfsTeamProjectCollection CreateCollection(WorkspaceInfo wi)
{
var s = (overrideConfig ?? Config);
var u = wi.ServerUri;
var vssCred = new VssClientCredentials(); // GetCredentials(s.Vsts);
Logger.Debug("getting collection for url:{0}", u);
TfsTeamProjectCollection tpc = null;
try
{
tpc = new TfsTeamProjectCollection(u, vssCred);
Logger.Debug("authenticating");
tpc.Authenticate(); // 401 non authorized exception here
}
我尝试在Autheticate() 之前添加vssCred.Storage = new VssClientCredentialStorage();,但没有成功
然后我使用 Fiddler 应用程序检查了网络数据包。 它显示使用单元测试、控制台应用程序和插件发送相同的请求数据包。 但是控制台应用程序和单元测试会产生初始请求
发布 https://dev.azure.com/quipu-cwnet/Services/v3.0/LocationService.asmx HTTP/1.1
响应是
HTTP/1.1 401 未经授权
X-TFS-FedAuthRedirect: https://app.vssps.visualstudio.com/_signin?realm=dev.azure.com&reply_to=https%3A%2F%2Fdev.azure.com%2F...
然后控制台和单元测试将数据包发送到重定向 url 并询问用户凭据。
当加载项尝试连接到 Tfs 服务器时,提琴手仅显示第一个 POST 请求和 401 响应(具有相同的 X-TFS-FedAuthRedirect 标头。但没有重定向。从用户端看来,应用程序冻结了一些获得 401 响应后的一段时间,然后失败并出现 401 错误。
单元测试和加载项程序集都对 15.0.0 程序集(如 Microsoft.TeamFoundation.VersionControl.Client 和相关)具有相同的引用。
我试过 VssConnection 但还是一样
VssConnection connection = new VssConnection(u, vssCred);
connection.ConnectAsync().SyncResult();
var prj = connection.GetClient<ProjectHttpClient>();
var prjCollection = prj.GetProjects().Result; // 401 error here when is executed as VS add-in
foreach (var pc in prjCollection)
Logger.Debug("\tVssConnection project {0} {1}", pc.Id, pc.Name);
我使用同一个用户来启动 VS(和加载项)和控制台。没有提升的权限。
当 TfsConnection 用作 VS 插件时,我能做些什么吗?
【问题讨论】:
标签: tfs visual-studio-2017 azure-devops add-in tfs-sdk