Получить версию службы во время выполнения
Как получить исполняемые версии служб Service Fabric (и приложений) во время выполнения? Я попробовал контекст, но и StatefulServiceContext
, и StatelessServiceContext
не предоставляют эту информацию.
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;