【问题标题】:Is there any documentation on TFS Web Services?有关于 TFS Web 服务的文档吗?
【发布时间】:2011-03-08 01:36:41
【问题描述】:

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

我完全了解可用于 TFS 的 .Net API,它仅适用于 Microsoft 操作系统。我在 Windows 上使用过很多次,但是我需要做非 Windows 工作才能访问 TFS,我不能使用 .Net,也不能使用安装在 Windows 计算机上的代理(或“shim”)来提供 Web 服务.Net API。

我知道 Teamprise 对 Web 服务进行了逆向工程,他们成功地利用这些知识制作了一个非常出色的跨平台 Team Explorer 和 Java 命令行实现来访问 TFS。太好了,事实上它们被 Microsoft 购买了,并且该产品更名为 Microsoft Visual Studio Team Explorer Everywhere 并重新发布。

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

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

请不要发表任何关于微软不推荐或不支持的帖子,我应该找到一种使用 .Net API 的方法,或者建议 Proxy/Shim 是最好的解决方案。我完全了解 Microsoft 对此的官方立场,以及支持的解决方法是什么。

【问题讨论】:

    标签: web-services tfs


    【解决方案1】:

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

    您提到的 NTLM 身份验证实际上是一个单独的层:您必须先向 IIS 进行身份验证,然后它才能让您调用 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 向后兼容,但通常新版本不是多余的(它们添加了新内容)。您可能已经有一个最喜欢的 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)。

    【讨论】:

    • 我见过的最好的信息......谢谢肖!我将此标记为已回答,但我希望其他人如果有更多有用的信息,会愿意为这个问题做出贡献!
    【解决方案2】:

    有一个 Java 版本的 TFS SDK 可以在 Linux、Mac 和 Windows 上运行。这是 Teamprise 使用的 SDK。

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

    不支持直接针对 TFS Web 服务进行编码(即使人们已经这样做了)。 MSFT 可能会在服务包或其他修补程序中不让您知道的情况下破坏界面。有时没有其他选择,但如果 Java SDK 适合您,我会先尝试使用它。

    【讨论】:

    • 这表明他们正在稳定 Web 服务并且不会在不更新公共 API 包装器的情况下更改它们。他们发布了一个跨平台的 Java SDK,这不仅仅是 Teamprises 使用的 SDK,它是他们创建/逆向工程并保留给自己的一个。微软现在欠它,并在对其进行一些清理和 JavaDoc-ifing 后发布。但是并不能解决我对跨平台 C# (Mono) 获取 TFS 的方式的需求。我不能合法地重新使用 Java SDK 来创建 Mono 版本。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多