Azure service fabric 在运行时获取服务版本
如何在运行时获取正在执行的服务结构服务(和应用程序)版本?我试过上下文,但是Azure service fabric 在运行时获取服务版本,azure-service-fabric,Azure Service Fabric,如何在运行时获取正在执行的服务结构服务(和应用程序)版本?我试过上下文,但是StatefulServiceContext和StatefulServiceContext都没有提供这些信息。也许我误解了你的问题,但是这个.Context.CodePackageActivationContext.CodePackageVersion?你可以使用FabricClient来获取这些信息 对于应用程序版本: var applicationName = new Uri("fabric:/MyApp"); //
StatefulServiceContext
和StatefulServiceContext
都没有提供这些信息。也许我误解了你的问题,但是这个.Context.CodePackageActivationContext.CodePackageVersion
?你可以使用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;
}
var fabricClient = new FabricClient();
var applicationTypeList = await fabricClient.QueryManager.GetApplicationTypeListAsync(
Context.CodePackageActivationContext.ApplicationTypeName);
var applicationType = applicationTypeList.FirstOrDefault();
var applicationVersion = applicationType?.ApplicationTypeVersion;
对于服务版本-
从服务类中:
Context.CodePackageActivationContext.GetServiceManifestVersion()
或:
注:
- 在升级过程中,您将使用此API获得旧版本。如果需要新版本,请使用
并检索FabricClient.ApplicationManager.GetApplicationUpgradeProgressAsync
TargetApplicationTypeVersion
- 如果经常使用,可能需要缓存
(请参阅)FabricClient
还包含与服务清单版本不同的CodePackageActivationContext
CodePackageVersion
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;
}
var fabricClient = new FabricClient();
var applicationTypeList = await fabricClient.QueryManager.GetApplicationTypeListAsync(
Context.CodePackageActivationContext.ApplicationTypeName);
var applicationType = applicationTypeList.FirstOrDefault();
var applicationVersion = applicationType?.ApplicationTypeVersion;
您也可以使用PowerShell。要获取应用程序类型版本,请执行以下操作:
Get-ServiceFabricApplication -ApplicationName fabric:/MyApplication | Select -expand ApplicationTypeVersion
要获取服务清单版本,请执行以下操作:
Get-ServiceFabricService -ApplicationName fabric:/MyApplication -ServiceName fabric:/MyApplication/MyStatefulService | Select -expand ServiceManifestVersion
这是应用程序版本还是服务版本?这是服务版本。应用程序的等效版本是什么?考虑到应用程序是独立于其服务的,肯定有一些东西。我已经发布了如何发现应用程序版本,尽管SF应用程序下的服务在查询集群的情况下无法检索应用程序版本,这让人感觉很不舒服。您可能会在这里得到不准确的结果。列表中的第一项可能不是当前实例使用的应用程序版本。看看我的答案。
servicemistanceversion
vsCodePackageVersion
是一个很好的观点。因此,对于服务版本,为什么不使用Context.CodePackageActivationContext.GetServiceManifestVersion()。这是因为FabricClient具有多种优化,例如缓存和批处理,否则您将无法充分利用这些优化。是否要获取部署到ASF的所有服务/应用程序的列表,还是仅获取当前代码正在其中执行的服务/应用程序的列表?在当前的列表中。下面的答案总结了这一点。对于应用程序,必须进行查询。