我有一个示例项目,使用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,我检查了所有常见的嫌疑人:
在WinINET设置中输入127.0.0.1:8888作为HTTP的代理(由Fiddler自动完成)
如果使用Fiddler是不可能的,还有其他方法可以从TFS客户端转储原始HTTP请求吗?
答案 0 :(得分:2)
根据BypassProxyOnLocalHelper
,您的服务器是本地的,它将本地主机定义为不完全限定的主机。如果您的主机被指定为tfs03te
,没有域名,则它是本地的。
只需指定tfs03te.mycompany.com
即可让您的主机有资格进行代理。