2012-09-20 30 views
3

我試圖確保我正在運行的一段代碼的服務器是Web前端服務器。我想這可能是這樣簡單:這將返回「應用程序」,並不能正確識別它作爲Sharepoint/C#:確定本地服務器是否爲Web前端

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

但是,如果你除了應用服務器等在同一機器上運行您的WFE一個web前端。

我的想法是通過確定Microsoft SharePoint Foundation Workflow Web應用程序(服務)是否已啓動並在服務器上運行。這可以通過轉到中央管理>系統設置>管理服務器上的服務來確定。

我需要在C#中以編程方式執行此操作。我相當肯定,這些服務和他們的狀態可以通過powershell獲得,這是一個可行的解決方案,但我不知道如何做到這一點。

編輯 - 我所知道的一種方式來遍歷「服務」使用下面的代碼:

SPServiceCollection services = SPFarm.Local.Services; 

foreach (SPService service in services) { 

} 

然而,這包括一些項目是「服務下一臉狐疑類似於列表服務器上「但都列爲」在線「狀態,似乎不包括此。

回答

4

我不在機器上檢查,但我有一種感覺,你會有更多的運氣與SPServer.Local.ServiceInstances - 這聽起來像它應該提供服務器上的服務器,而不是一般的農場。

+0

事實上,這確實奏效。先生,幹得好。我最終通過檢查它的類型「Microsoft.SharePoint.Administration.SPWebServiceInstance」來測試它,除了它實際上稱爲「SPWebServiceInstance」,儘管我希望後者不會隨着不同的語言而改變。 – tnw

0

不幸的是,即使這樣做是可靠的,因爲基礎Web應用程序服務可以在實際上不是前端服務器的服務器上運行(即負載平衡器從不將流量指向它們)。最終,它是負載均衡機制所確定的服務器列表,它確定哪些服務器是真正的前端,並且因爲有各種類型的負載均衡器,並且它們沒有單一接口,所以我不相信存在任何一種保證方法確定農場中真正的Web前端的數量。

相關問題