我正在为 TFS 2012 撰写一个小型 C#报告应用程序。
TFS服务器是远程的,只能通过网络中的HTTP代理服务器访问,因为防火墙会阻止直接访问。
代理在Internet Explorer中配置,因此我可以在IE中打开TFS URL,并且在使用TFS时它也会由Visual Studio自动使用。
问题是我的应用程序忽略了IE代理设置,并尝试直接连接到TFS服务器(我在Wireshark中看到了这一点),因此在防火墙超时后它会失败。
以下是我使用的代码:
Uri TfsCollectionURL = new Uri("...");
NetworkCredential credential = new System.Net.NetworkCredential(Username, Password, Domain);
TfsTeamProjectCollection collection = new TfsTeamProjectCollection(TfsCollectionURL, credential);
collection.EnsureAuthenticated();
ICommonStructureService projectService = collection.GetService<ICommonStructureService>();
foreach (ProjectInfo project in projectService.ListProjects())
{
...
}
应用程序失败。 EnsureAuthenticated ()异常:
TF400324:服务器无法使用Team Foundation服务...
连接尝试失败,因为连接方没有 在一段时间后正确回应,或建立连接 失败,因为连接的主机无法响应......
它可以在允许直接访问TFS服务器的另一个子网上运行。
如何在C#应用程序中使用 HTTP代理连接到TFS?
答案 0 :(得分:1)
尝试使用以下代码添加App.config文件以设置默认代理:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy>
</system.net>
</configuration>
答案 1 :(得分:0)
您可以直接设置凭据以传递代理:
WebProxy p = new WebProxy("proxyserver.domain.com:8080", true);
p.Credentials = new NetworkCredential("domain\\user", "password");
WebRequest.DefaultWebProxy = p;
在我的场景中,我们有一个用于开发的子网,并且不允许那些帐户/机器访问互联网。因此,我们需要输入上层域代理和那些域凭据才能访问互联网。