2016-05-29 133 views
2

如何在運行時獲取正在執行的Service Fabric服務(和應用程序)版本?我已經嘗試了上下文,但StatefulServiceContextStatelessServiceContext都沒有提供該信息。在運行時獲取服務版本

+0

你想獲得的部署ASF或只是服務/應用程序當前的所有服務/應用程序的列表代碼在內部執行? –

+0

在當前之內。下面的答案總結了它。爲應用程序必須查詢。 –

回答

4

您可以使用FabricClient來獲取此信息。

對於應用程序版本:

var applicationName = new Uri("fabric:/MyApp"); // or use Context.CodePackageActivationContext.ApplicationName 
using (var client = new FabricClient()) 
{ 
    var applications = await client.QueryManager.GetApplicationListAsync(applicationName).ConfigureAwait(false); 
    var version = applications[0].ApplicationTypeVersion; 
} 

對於服務版本 -

從服務類中:

Context.CodePackageActivationContext.GetServiceManifestVersion() 

或者:

var serviceName = new Uri("fabric:/MyApp/MyService"); // or use Context.ServiceName 
using (var client = new FabricClient()) 
{ 
    var services = await client.QueryManager.GetServiceListAsync(applicationName, serviceName).ConfigureAwait(false); 
    var version = services[0].ServiceManifestVersion; 
} 

注:

  • 在升級期間,您將獲得使用此API的舊版本。如果您需要在新版本中,使用FabricClient.ApplicationManager.GetApplicationUpgradeProgressAsync和retrive的TargetApplicationTypeVersion
  • 你可能想,如果你經常使用它來緩存FabricClient(見remarks here
  • CodePackageActivationContext還包含CodePackageVersion,比服務的版本不同清單
+1

'ServiceManifestVersion'和'CodePackageVersion'是一個很好的觀點。所以對於服務版本,爲什麼不去追求'Context.CodePackageActivationContext.GetServiceManifestVersion()'? –

+0

錯過了那一個。我會更新我的答案。 –

+0

@EliArbel「您可能想要緩存'FabricClient'」 - 客戶端的創建成本高嗎? –

0

也許我誤解了你的問題,但this.Context.CodePackageActivationContext.CodePackageVersion呢?

+0

這是一個應用程序版本還是服務版本? –

+0

這是服務版本。 – Raghu

+0

該應用程序的等同物是什麼?考慮到應用程序與服務分開存在,必須有一些東西。 –

0

要找出應用程序版本:

var fabricClient = new FabricClient(); 
var applicationTypeList = await fabricClient.QueryManager.GetApplicationTypeListAsync(
          Context.CodePackageActivationContext.ApplicationTypeName); 
var applicationType = applicationTypeList.FirstOrDefault(); 
var applicationVersion = applicationType?.ApplicationTypeVersion; 
+0

您可能會在此處得到不準確的結果。列表中的第一項可能不是當前實例使用的應用程序的版本。看看我的答案。 –

1

您也可以使用PowerShell。爲了讓應用程序類型的版本:

Get-ServiceFabricApplication -ApplicationName fabric:/MyApplication | Select -expand ApplicationTypeVersion 

要使服務清單版本:

Get-ServiceFabricService -ApplicationName fabric:/MyApplication -ServiceName fabric:/MyApplication/MyStatefulService | Select -expand ServiceManifestVersion 
+0

需要基於代碼的方法。 –

相關問題