Получить версию службы во время выполнения


Как получить исполняемые версии служб Service Fabric (и приложений) во время выполнения? Я попробовал контекст, но и StatefulServiceContext, и StatelessServiceContext не предоставляют эту информацию.

4 2

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 и повторите TargetApplicationTypeVersion
  • Вы можете кэшировать FabricClient , Если часто используете его (см. Примечания здесь )
  • в CodePackageActivationContext также содержится CodePackageVersion, которая отличается от версии манифеста службы

Можно также использовать PowerShell. Чтобы получить версию типа приложения:

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

Чтобы получить версию манифеста службы:

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

Может быть, я неправильно понял ваш вопрос, но как насчет this.Context.CodePackageActivationContext.CodePackageVersion?

Чтобы узнать версию приложения:

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