【问题标题】:How to get an ApplicationServiceHost instance with TFS 2013's Server Object Model?如何使用 TFS 2013 的服务器对象模型获取 ApplicationServiceHost 实例?
【发布时间】:2014-11-10 15:50:50
【问题描述】:

我花了很多时间寻找如何使用 TFS Server 对象模型获取具有 TeamFoundation 12.0 (TFS 2013) 的 ApplicationServiceHost 的实例...这个类曾经在 Microsoft.TeamFoundation 中TeamFoundation 10.0 中的 .Framework.Server.dll。但我不知道如何使用 TeamFoundation 12.0 获得它。

我需要使用Server对象模型,因为我想访问TFS的Queued Jobs(使用Server Job Service的QueryJobQueue方法),这是Client端不可用的方法。

使用 TFS 2010 的服务器对象模型,可以执行以下操作:

var applicationHost = new ApplicationServiceHost( 
                Guid.Empty, 
                applicationDatabaseConnectionString, 
                "unused", 
                Path.Combine(toolPath, "Plugins"), 
                "/tfs", 
                true);

但我无法弄清楚如何使用服务器对象模型 12.0 具体做到这一点。根据 MSDN,我应该首先获得一个 TeamFoundationServiceHost(应用程序或集合)并使用它的属性 ApplicationServiceHost。但是我怎样才能以编程方式获得这样的 TeamFoundationServiceHost 呢?

一旦我能获得这样的实例,我将使用来自here 的 C# Server OM 代码示例从控制台应用程序访问作业服务。目的是在重新启动 TFS 服务器之前检查是否有任何备份作业正在运行,并让 Windows 的补丁有机会应用...

【问题讨论】:

    标签: c# .net tfs


    【解决方案1】:

    如果您只是想知道备份是否正在运行,那么您可能希望使用客户端 API,而不是服务器 API。服务器 API 用于插件,例如服务器端事件订阅(ISubscriber 接口)和自定义作业,以便作业代理运行。

    不幸的是,您可能已经发现,客户端 API 可以列出所有作业定义,并且您可以查看作业历史记录,但您看不到作业队列本身或作业是否正在运行。

    那么,该怎么办?

    如果您只是想知道在重启之前是否没有运行备份并且您可以手动检查,您可以通过操作界面浏览至http://yourserver:8080/tfs/_oi/查看作业代理状态

    如果您想通过代码检测事物,那么可能值得看看使用浏览器开发人员工具(即 F12 工具)在后台调用作业队列页面的内容。您将看到对http://yourserver:8080/tfs/_oi/_monitoring/GetJobQueue API 的调用。如果您通过代码调用该 API,您应该能够查看是否有任何 InProgress 作业。

    注意:API 未记录在案,因此您可能需要进行一些试验以确定调用的正确参数。

    【讨论】:

    • 非常感谢!我很欣赏你的建议。我将研究第二个,因为我想从脚本中调用它。我可能会添加最后一个选项:从服务器端事件处理程序调用我的代码:D。我曾经为签到事件编写了很多处理程序。我会看看我在这里能想象的(在未记录的 API 和被劫持的进程之间,不知道最糟糕的是什么):D
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多