如何使用Event Service挂钩入住事件?

时间:2011-11-09 18:01:32

标签: visual-studio-2010 visual-studio-2008 tfs tfs2010 tfs2008

这是来自Team Foundation Server: Getting the Changeset Id from PolicyBase object

的后续问题

我想在办理登机手续时运行一些代码。上面链接问题的答案在this page on MSDN指出了我。

我没有完全理解页面上的解释,我不确定将在何处运行签入事件处理程序。

这应该是在每个客户端计算机上运行的应用程序中,还是需要在实际的TFS服务器上运行?

我需要确保每次签到时都会运行签入事件处理程序代码,而不管哪个客户端进行了签入。

我尝试下载该Microsoft页面上提供的示例代码,但它不起作用。 我可以连接到TFS服务器。当我点击“获取已注册事件列表”按钮时,左侧列表框将填充13个名称为

的项目
  

Microsoft.TeamFoundation.Server.RegistrationEntry

只要点击其中一个项目,我就会收到 TypeLoadException 并显示消息

  

无法从程序集'Microsoft.TeamFoundation,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'

加载类型'Microsoft.TeamFoundation.Server.Subscription'

(奇怪的是,这似乎引用了VS2010版本的程序集,即使它是我已经链接到项目的VS2008版本。)

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

图书馆参考

我一直觉得尝试使用TFS2008库而不是安装后的2010库是一件痛苦的事。您可以更改引用以使用特定版本的DLL,但是不应该使用TFS2010,因为它们是向后兼容的。

活动订阅

对于TFS2010,最简单的方法是将自定义DLL放在c:\ Program Files \ Microsoft Team Foundation Server 2010 \ Application Tier \ Web Services \ bin \ Plugins中,这些编写非常简单,只需要为CheckinNotification实现ISubscriber。

Example Code
http://embeddedworkitems.codeplex.com/SourceControl/changeset/view/2611#97271

对于TFS2008,或者如果你喜欢在TFS2010中,你需要使用SOAP webservices(或bisubscribe.exe工具)来订阅事件并自己拥有一个web服务,以便tfs将事件推送到。这是订阅事件的一种更难的方式,所以如果您可以使用插件方法,我会推荐它(虽然它可以更强大,更适合负载分配)。

VSTS Subscription FAQ http://blogs.msdn.com/b/narend/archive/2006/07/27/679571.aspx
Subscribing without a Client SOAP Service http://blogs.msdn.com/b/mrod/archive/2006/09/18/761174.aspx

TFS Deployer是一个开源项目,作为Windows服务运行,并通过SOAP服务接收事件通知。它包含一个库(可以重复使用),它似乎有一些代码用于接收签入事件

http://tfsdeployer.codeplex.com/SourceControl/changeset/view/57852#2395

使用订阅只需要应用程序的一个副本来获取事件并处理它们,它可以在TFS服务器上(如果您使用的是插件方法),但在使用SOAP订阅时可以在另一台机器上。

签到政策是另类答案?

根据您正在编码的内容,您可以编写签到策略。这需要安装在所有客户端计算机上,并且不会被所有不同的客户端支持(例如eclipse),但它可能适合您的需求。我之前提供的用于在签到注释中支持嵌入式工作项代码的工具的示例还附带了一个签入策略来执行其他检查

http://embeddedworkitems.codeplex.com/SourceControl/changeset/view/2611#97267