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
vs
CodePackageVersion
是一个很好的观点。因此,对于服务版本,为什么不使用
Context.CodePackageActivationContext.GetServiceManifestVersion()。这是因为FabricClient具有多种优化,例如缓存和批处理,否则您将无法充分利用这些优化。是否要获取部署到ASF的所有服务/应用程序的列表,还是仅获取当前代码正在其中执行的服务/应用程序的列表?在当前的列表中。下面的答案总结了这一点。对于应用程序,必须进行查询。