- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找有关 Microsoft TFS Web 服务的任何信息。首先,我知道不支持直接访问 Microsoft TFS Web 服务,并且 Microsoft 没有为此提供任何文档。因此,我不期待任何 Microsoft 支持或帮助。
我了解可用于 TFS 的 .Net API,它仅适用于 Microsoft 操作系统。我在 Windows 上使用过很多次,但是我需要做非 Windows 工作来访问 TFS,我不能使用 .Net,我不能使用安装在 Windows 计算机上的代理(或“垫片”)来提供 Web 服务对于.Net API。
我知道 Teamprise 对 Web 服务进行了逆向工程,他们成功地利用这些知识制作了一个非常好的跨平台 Team Explorer 和 Java 命令行实现来访问 TFS。事实上,它们被 Microsoft 购买并且产品重新命名并重新发布为 Microsoft Visual Studio Team Explorer Everywhere。
我还在几个非 Windows 平台上针对 Mono 测试了 .Net API,但它们不兼容。初始 NTLMv2 身份验证正在使用 Mono 不支持的调用。可以理解,它们似乎是针对 Win32 调用 NTLMv2 支持。
因此,在我不厌其烦地为自己逆向工程之前,并处理 NTLMv2 来做到这一点之前。我希望网络上有一些隐藏或隐藏的信息,有人可能已经记录了 2005 年、2008 年和/或 2010 年的 TFS 网络服务的某些部分。
请不要评论或发布关于 Microsoft 不推荐或不支持的评论或帖子,我应该找到一种使用 .Net API 的方法,或建议代理/Shim 是最佳解决方案。我完全了解微软对此的官方立场,以及支持的变通方法是什么。
最佳答案
我不知道 TFS Web 服务的任何文档,但我可以分享一些调用它们的技巧。
您提到的 NTLM 身份验证实际上是一个单独的层:您必须先向 IIS 进行身份验证,然后它才能让您调用 TFS Web 服务。我不知道有任何开源软件可以为您执行 NTLM 身份验证,但 TFS 2010 可以轻松启用“协商”身份验证( SPNEGO on Wikipedia 、 Authentication by using Kerberos Ticket on MSDN )。 Negotiate 支持 NTLM 和 Kerberos 子系统,并且可能有一些现有的软件可以使用系统的 Kerberos 库来驱动它(我认为 curl 可以做到)。如果您必须自己构建它,走与 Kerberos 协商的路线可能会更容易。
一旦您通过身份验证,您就可以开始调用服务。首先为每个服务拉下 WSDL(在每个端点 URI 上粘贴“?wsdl”后缀)。跳转到 TFS 的安装位置并浏览端点的 Web 应用程序目录。某些端点有多个版本可与 TFS 2005 和 2008 兼容,但通常新版本不是多余的(它们添加了新内容)。您可能已经有一个最喜欢的 SOAP 客户端库(Java 有很多),但我真的不能推荐任何一个,因为我们在 Teamprise 编写了我们自己的库。
通过 WSDL 很容易发现诸如版本控制、构建和通用结构之类的服务。大多数操作都有明显的名称,但复杂类型的字段通常是 super 缩写的。确定何时调用哪些方法的最佳方法是使用 Fiddler 或 Wireshark 或其他一些 HTTP 检查程序观看 VS TFS 客户端或 TEE。 TFS VC 会在 Web 服务之外执行诸如文件上传/下载之类的操作(观看网络跟踪以查看多部分 MIME 上传过程,并确保在执行此操作时发送正确的值)。
关于工作项跟踪 Web 服务的注意事项:此服务将极难掌握。 WIT 设计涉及客户端预先查询服务器以获取大量无模式元数据,这些元数据保存在客户端上(但随着更多 Web 服务调用的进行而逐渐刷新)。此元数据驱动有关工作项的所有客户端行为(工作项类型中有哪些字段、字段的类型、字段中允许哪些值、更改时运行的规则等),并且需要长期认真研究,以建立客户行为,使工作项目栩栩如生。一旦您有了工作项,就可以轻松地将其发送到服务器以通过 Web 服务进行更新。
这是很多工作,但可以逐步完成,例如,如果您只需要一些 VC 功能。 TEE 团队正在努力使从其他平台的访问变得更容易。如果您在这方面有任何问题或建议,请联系 Martin Woodward (martin.woodward@microsoft.com)。
关于web-services - 是否有关于 TFS Web 服务的任何文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227376/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!