我正在执行从 tfs.visualstudio 到本地 2012 服务器的 TFS 集成迁移。我遇到了一个特定变更集的问题,该变更集包含多个超过 1 MB 的二进制文件,其中一些文件大小为 15-16 MB。 [我正在使用本地 TFS 进行远程 (WAN) 工作]
从 TFSI 日志中,我看到:Microsoft.TeamFoundation.VersionControl.Client.VersionControlException: C:\TfsIPData\42\******\Foo.msi: The request was aborted: The request was canceled.
---> System.Net.WebException: The request was aborted: The request was canceled.
---> System.IO.IOException: Cannot close stream until all bytes are written.
通过谷歌搜索,我遇到了其他人遇到类似的问题,不一定与 TFS 集成有关。我相信,如果我只是像平常一样检查符合相同标准的变更集,也会出现同样的问题。据我了解,上传文件(签入)时,默认块大小为16MB,超时为5分钟。
我在这个网站上的互联网上传速度只有 1Mbit/s。 (虽然我认为通过足够的上传带宽可以缓解这个问题,但这并不能解决问题)。
使用 TCPView,我在上传过程中观察了客户端与 TFS 服务器的连接。我看到的是 9 个同时连接。因此,我的带宽被 9 个文件上传共享。果然,大约 5 分钟后,在上传字节计数完成之前,连接就中断了。
我的问题是,如何配置我的 TFS 客户端以利用更少的并发连接、和/或更小的块大小、和/或增加超时?这可以在全球某个地方完成以涵盖 VS、TF.EXE 和 TFS 集成吗?
在花了一些时间在 Microsoft.TeamFoundation.VersionControl.Client.dll FileUploader 中研究 IL DASM 后,我在构造函数中发现了字符串VersionControl.UploadChunkSize
。看起来它是用来覆盖默认块大小(DefaultUploadChunkSize = 0x01000000)。
所以,我将其添加到 TfsMigrationShell.exe.config
<appSettings>
<add key="VersionControl.UploadChunkSize" value="2097152" />
</appSettings>
并再次运行 VC 迁移——这次它解决了问题变更集!
基本上,TFS 客户端 DLL 将尝试同时上传多个文件(在我的例子中为 9 个)。您的上传带宽将在文件之间分配,如果任何单个文件传输无法在 5 分钟内完成 16MB,则操作将失败。因此您可以看到,在适度的上传带宽下,包含多个二进制文件的变更集可能会超时。您唯一可以控制的是每个 5 分钟超时块的字节数。默认值为 16MB,但您可以减少它。我把我的减少到 2MB。
我想这可以对 devenv.exe.config 执行,以在执行开发人员代码签入时处理相同的问题。希望这些信息能够帮助其他人并节省他们一些时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)