是否有关于TFS Web服务的文档?

时间:2011-03-08 01:36:41

标签: web-services tfs

我正在寻找有关Microsoft TFS Web服务的任何信息。首先,我知道不支持直接访问Microsoft TFS Web服务,Microsoft没有提供执行此操作的文档。因此,我不期待任何Microsoft支持或帮助。

我知道可用于TFS的.Net API,它只适用于Microsoft操作系统。我在Windows上使用了很多次,但是我需要非Windows工作来访问TFS,我不能使用.Net而且我不能使用代理(或“shim”)安装在Windows计算机上来提供Web服务对于.Net API。

我知道Teamprise逆向设计了Web服务,他们成功地利用这些知识在Java中创建了一个非常好的跨平台Team Explorer和命令行实现来访问TFS。事实上,它们很好地被微软收购,产品重新命名并重新发布为Microsoft Visual Studio Team Explorer Everywhere。

我还在几个非Windows平台上针对Mono测试了.Net API,但它们不兼容。初始NTLMv2身份验证使用Mono不支持的调用。他们似乎可以理解为Win32特定调用NTLMv2支持。

因此,在我为自己进行逆向工程的麻烦之前,并处理NTLMv2来做到这一点。我希望网上有一些隐藏或隐藏的信息,有人可能已经记录了2005年,2008年和/或2010年TFS的部分网络服务。

请不要评论或发布有关Microsoft不推荐或不支持的方法,我应该找到一种方法来使用.Net API,或者建议Proxy / Shim是最佳解决方案。我完全了解微软对此的官方立场,以及支持的解决方法。

3 个答案:

答案 0 :(得分:17)

我不知道有关TFS Web服务的任何文档,但我可以分享一些关于调用它们的提示。

您提到的NTLM身份验证实际上是一个单独的层:您必须先通过身份验证才能调用TFS Web服务。我不知道任何将为您执行NTLM身份验证的开源软件,但TFS 2010可以轻松启用“协商”身份验证(SPNEGO on WikipediaAuthentication by using Kerberos Ticket on MSDN)。 Negotiate支持NTLM和Kerberos子系统,并且可能有一些现有的软件可以使用系统的Kerberos库来驱动它(我认为curl会这样做)。如果您必须自己构建它,那么使用Negotiate-with-Kerberos路径可能会更容易。

一旦通过身份验证,您就可以开始呼叫服务了。首先拉下每个服务的WSDL(在每个端点URI上粘贴一个“?wsdl”后缀)。跳到安装TFS的位置,浏览端点的Web应用程序目录。有一些端点用于TFS 2005和2008的后端compat,但通常新版本不是多余的(它们添加了新的东西)。你可能已经有了一个最喜欢的SOAP客户端库(有很多用于Java),但我不能真正推荐任何因为我们在Teamprise上自己编写的。

通过WSDL可以轻松发现版本控制,构建和公共结构等服务。大多数操作都有明显的名称,但复杂的类型字段通常是超缩略的。确定调用哪些方法的最佳方法是使用Fiddler或Wireshark或其他HTTP检查程序观察VS TFS客户端或TEE。 TFS VC会执行诸如Web服务之外的文件上载/下载之类的操作(观看网络跟踪以查看多部分MIME上载过程,并确保确定如果您实现此操作,则发送正确的值)

关于工作项跟踪Web服务的注意事项:这个很难掌握。 WIT设计涉及客户端预先查询服务器以获取大量无模式元数据,该元数据保存在客户端上(但随着更多Web服务调用而逐步刷新)。此元数据驱动有关工作项的所有客户端行为(工作项类型中的字段,字段的类型,字段中允许的值,更改时运行的规则等),它将采用长时间和认真的学习,以建立客户行为,使工作项目生活。有了工作项后,通过Web服务将其发送到服务器进行更新很容易。

这是很多工作,但是可以逐步进行,例如,如果你只需要一些VC功能。 TEE团队正在努力使其他平台的访问更加容易。如果您对此领域有任何问题或建议,请联系Martin Woodward(martin.woodward@microsoft.com)。

答案 1 :(得分:3)

有一个可在Linux,Mac和Windows上运行的Java版TFS SDK。它是Teamprise使用的SDK。

http://blogs.msdn.com/b/bharry/archive/2011/05/16/announcing-a-java-sdk-for-tfs.aspx

不支持直接针对TFS Web服务进行编码(即使有人已经完成)。 MSFT可能会破坏界面,而不会让您知道在Service Pack或其他修补程序中。有时没有其他选项,但如果Java SDK适合您,我会先尝试使用它。

答案 2 :(得分:0)