通过HTTP代理从C#连接到TFS

时间:2013-10-24 14:38:01

标签: c# visual-studio-2012 tfs proxy http-proxy

我正在为 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?

2 个答案:

答案 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;

在我的场景中,我们有一个用于开发的子网,并且不允许那些帐户/机器访问互联网。因此,我们需要输入上层域代理和那些域凭据才能访问互联网。