5

我正在执行从 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 集成吗?

4

1 回答 1

10

在使用 IL DASM 浏览 Microsoft.TeamFoundation.VersionControl.Client.dll FileUploader 一段时间后,我在构造函数中发现了 string 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 进行,以在执行开发人员代码签入时处理相同的问题。希望这些信息可以帮助其他人并节省他们一些时间。

于 2013-09-24T21:55:15.770 回答