3

我正在尝试确保我当前正在运行一段代码的服务器是 Web 前端服务器。我认为它可能就像这样简单:

SPServer.Local.Role.ToString().Equals("WebFrontEnd")

但是,如果您在同一个盒子上运行 WFE 以及应用程序服务器等,这将返回“应用程序”并且无法正确地将其识别为 Web 前端。

我的想法是,通过确定 Microsoft SharePoint Foundation 工作流 Web 应用程序(服务)是否在服务器上启动和运行。这可以通过转到 Central Admin > System Settings > Manage Services on Server 来确定。

我需要在 C# 中以编程方式执行此操作。我相当确定这些服务及其状态可以通过 powershell 获得,这是一个可行的解决方案,但我不确定如何做到这一点。

编辑——我知道一种使用以下代码循环“服务”的方法:

SPServiceCollection services = SPFarm.Local.Services;

foreach (SPService service in services) {

}

但是,这包括一些看起来与“服务器上的服务”下的列表非常相似但都以“在线”状态列出的项目,并且似乎不包括这一点。

4

2 回答 2

4

我不在一台机器上检查,但我感觉你会有更多的运气SPServer.Local.ServiceInstances- 听起来它应该特别提供服务器上的服务,而不是一般的农场。

于 2012-09-20T20:44:24.007 回答
0

不幸的是,即使这样也不可靠,因为 Foundation Web Application 服务可以在实际上不是前端服务器的服务器上运行(即负载平衡器从不将流量导向它们)。最终,负载均衡机制拥有的服务器列表决定了哪些服务器是真正的前端,并且因为有各种类型的负载均衡器并且没有一个接口可以连接所有这些,我不相信有任何一种保证的方法确定场中真实 Web 前端的数量。

于 2013-04-03T21:31:29.647 回答