我有一个示例项目,使用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 however doesn't see that traffic. How do I change that?
有用的东西:
我自己做一个类似的电话
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我检查了所有常见的嫌疑人:
-
它捕获来自"All Processes"的流量
-
在启动时充当系统代理
-
监控所有连接
-
它听8888
-
"Use PAC Script"未选中但切换它不会改变任何内容
-
选项 - >网关 - >使用系统代理被选中
在WinINET设置中输入127.0.0.1:8888作为HTTP的代理(由Fiddler自动完成)
如果Fiddler无法实现,是否还有其他方法可以从TFS客户端转储原始HTTP请求?
1 回答
根据
BypassProxyOnLocalHelper
,您的服务器是本地服务器,它将本地主机定义为不完全限定的主机 . 如果您的主机指定为tfs03te
,没有域,则它是本地的 .只需指定
tfs03te.mycompany.com
即可使您的主机有资格进行代理 .