【发布时间】:2015-03-04 12:14:57
【问题描述】:
我有一个示例项目,我在其中使用 TFS 客户端库(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 脚本”未选中,但切换它不会改变任何内容
- 选项 -> 网关 -> 使用系统代理被选中
在 WinINET 设置中,输入 127.0.0.1:8888 作为 HTTP 代理(由 Fiddler 自动完成)
如果 Fiddler 无法实现,还有其他方法可以转储来自 TFS 客户端的原始 HTTP 请求吗?
【问题讨论】: