用户可以通过团队浏览器(TeamExplorer)->TFS服务器名->团队项目名->文档节点来读取和操作项目文档。
1)项目文档树形结构是如何在TE中显示出来的,
2)几种观察到的错误情形,以及
3)出现错误时如何排查的思路。
当用户登录到TE,或在团队项目节点上进行“刷新”操作时,TE做如下动作:
1. TE调用一个WSS web service http://<WSSServer:port>/sites/<project name>/_vti_bin/Lists.asmx, web method GetListItems。参数定义令WSS递归读取团队项目文档库根路径下所有文件/文件夹记录。调用方法使用的身份是当前使用TE的用户,而不是TFS服务用户。
2. WSS web service返回的响应是一个XML字符串,主要部分就是一个数据集,每条记录对应文档库中的一个文件或文件夹。记录包括一些描述该文件/文件夹的WSS属性。
3. TE取XML数据集每条记录的ows_FileRef属性(文件/文件夹的路径)建立树形结构。对每个”"”结尾的记录,添加一个文件夹节点;对每个非”"”结尾的数据,按照路径添加到相应文件夹节点下。如路径为“"folderA"folderB"fileC.doc”的项目,就添加到文件夹folderA下的文件夹folderB下,命名为fileC.doc。这里的实现很直接。
问题解决:
“文档”节点标了个红叉,下面没有数据.因为从WSS web service取数据的请求是使用当前用户身份发出的,因此如果当前用户没有访问该WSS文档库的权限,就没有数据返回。这是TFS新用户经常提出的问题。TFS中的项目团队和权限定义仅覆盖版本控制和任务项管理。为了让团队成员能够访问团队项目站点及文档库,项目经理需要在WSS站点中额外定义用户的访问权限。同样的,为了让项目成员可以访问到各种报表,项目经理还需要在reporting service站点定义相应权限。
另一个可能的原因是目标WSS服务当前(对本机)不可用。这两种情形使用web浏览器访问一下WSS站点就可以验证。
文档树出现错误。这种情况很少见。有一次用户报告说TE中的文档树是错误的。有一个文件夹丢失了,文件夹中的文档都被错误地放置在文档库根目录下面。检查WSS web method返回的数据,我们发现记录集中所有的文件"文件夹都在,唯独缺少丢失的文件夹对应的记录。这样TE在建立文档树的时候就没有生成该文件夹节点。文件夹下的文档无处可放,就直接放在了根路径下。最终原因是WSS数据库中该文件夹对应的记录不知何故丢失了。补足这一记录,问题就解决了。
顺便说一句,最初看起来确实像是TE出了问题。WSS数据库记录丢失的情况下,WSS自己的站点似乎知道如何处理。WSS站点中相应的文件和文件夹都显示在正确的位置。
一些文件/文件夹从文档树中丢失了.您的WSS文档库是不是存放了超过一万条记录呢?TE向WSS请求数据时,参数“RowLimit”设定为10,000。因此文档树最多显示一万条记录(包括文件和文件夹)。TE2005和2008中这个数量无法通过配置进行修改,将来的版本或许会提高限额。如果您的文档库超过一万条记录,那么不要从TE看文档了,还是用WSS站点吧。
当到TE->文档节点出现错误的时候,建议按照如下顺序排错:
1. 在同一台计算机上,使用同一登录帐户,通过web浏览器打开项目portal站点,看是否能够正常浏览TE无法访问的内容。如果也出现了问题,就从WSS方面入手。否则继续往下;
2. 抓取TE与WSS之间的网络通讯包(是用MS network monitor,wireshark, fiddler等工具.),检查围绕/sites/<project name>/_vti_bin/Lists.asmx的请求和响应。请求是否发送向正确的server?参数是否正确?响应是否包含正确的数据集?
3. 如果步骤2中的WSS响应看起来没有问题,那多半就是TE出状况了。可以到MSDN论坛看看,或者联系微软技术支持。