如何使用Fiddler从TFS客户端捕获HTTP通信

时间:2015-03-04 12:14:57

标签: tfs fiddler

我有一个示例项目,使用TFS Client lib(Microsoft.TeamFoundation.Build.Client.dll等),我查询构建。

using (var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection
                                                              (new Uri(tfsServerName)))
{        
    var bs = tfs.GetService<IBuildServer>();
    var buildSpec = bs.CreateBuildDetailSpec(teamProject, buildDefinitionName);
    buildSpec.InformationTypes = null;
    buildSpec.MinFinishTime = DateTime.Now.AddDays(-10);
    buildSpec.Status = BuildStatus.Succeeded;
    var buildDetails = bs.QueryBuilds(buildSpec).Builds;
}

我想在运行该代码时捕获并分析传出的HTTP流量。 使用Wireshark我看到DLL为服务器定期发送HTTP POST。

然而,

Fiddler看不到那个流量。我该如何改变?

有效的东西:

自己做一个类似的电话

new WebClient().DownloadString("http://tfs03te:8080/tfs/DefaultCollection/Build/v4.0/BuildService.asmx");

我尝试过的事情:

设置GlobalProxySelection(是的,它已经过时)

GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888);  

设置TFSPROXY环境变量

System.Environment.SetEnvironmentVariable("TFSPROXY","http://127.0.0.1:8888");

在app.config中设置代理

<system.net>
 <defaultProxy enabled = "true" useDefaultCredentials = "true">
     <proxy autoDetect="False" bypassonlocal="False" 
            proxyaddress="http://127.0.0.1:8888" usesystemdefault="False" />
 </defaultProxy> 
</system.net>

下的注册表中设置代理
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\TeamFoundation\SourceControl\Proxy

我设置

Enabled = True
Proxy = http://127.0.0.1:8888

以上都没有成功。

分析反编译的TFS客户端

Microsoft.TeamFoundation.Client.Channels.TfsHttpRequestHelpers.PrepareWebRequest() 

我发现只有在适当的设置告诉

时才会绕过代理
if (settings.BypassProxyOnLocal && BypassProxyOnLocalHelper.IsHostLocal(webRequest.RequestUri.Host))
{
    webRequest.Proxy = null;
}

(另外服务器甚至不是本地的)

除此之外,在使用TfsHttpRequestHelpers.PrepareWebRequest(更深入的内部使用WebRequest.InternalDefaultWebProxy中的默认值)创建请求后,它似乎不会修改该代理值。 但我一定错过了一些东西,因为它仍然绕过代理(即Fiddler)。

在Fiddler,我检查了所有常见的嫌疑人:

  • 它捕获来自“所有进程”的流量
  • 在启动时充当系统代理
  • 监控所有连接
  • 听取8888
  • “使用PAC脚本”未选中,但切换它不会改变任何内容
  • 选项 - &gt;网关 - &gt;选择使用系统代理

在WinINET设置中输入127.0.0.1:8888作为HTTP的代理(由Fiddler自动完成)

如果使用Fiddler是不可能的,还有其他方法可以从TFS客户端转储原始HTTP请求吗?

1 个答案:

答案 0 :(得分:2)

根据BypassProxyOnLocalHelper,您的服务器本地的,它将本地主机定义为不完全限定的主机。如果您的主机被指定为tfs03te,没有域名,则它是本地的。

只需指定tfs03te.mycompany.com即可让您的主机有资格进行代理。