Могу ли я изменить параметры в файле Service Fabric в файле ServiceManifest.xml, используя параметры приложения?

У меня есть файл ApplicationManifest.xml, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric"
   ApplicationTypeName="ServiceFabricTestType" ApplicationTypeVersion="1.9">
   <Parameters>
     <Parameter Name="Prop_BehavioursPath" DefaultValue="behaviours.yml"/>
     <Parameter Name="Prop_AliasesPath" DefaultValue="aliases.yml"/>
   </Parameters>
  <ServiceManifestImport>
  <ServiceManifestRef 
    ServiceManifestName="SummaryGenerator" 
    ServiceManifestVersion="1.9.0.0" 
    />
  </ServiceManifestImport>
</ApplicationManifest>

И я хочу использовать параметры для настройки аргумента моей гостевой службы, объявленной в файле ServiceManifest.xml, например:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric"
   Name="SummaryGenerator" Version="1.9.0.0">
   <ServiceTypes>
     <StatelessServiceType ServiceTypeName="SummaryGenerator" UseImplicitHost="true"/>
   </ServiceTypes>
   <CodePackage Name="code" Version="1.9.0.0">
   <EntryPoint>
     <ExeHost>
        <Program>MyProgram.exe</Program>
        <Arguments>&quot;LoadFrom=[Prop_AliasesPath]|[Prop_BehavioursPath]&quot;</Arguments>
        <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
     </ExeHost>
   </EntryPoint>
  </CodePackage>
</ServiceManifest>

Это явно не работает, так как свойства, входящие в Аргументы, обрабатываются как дословно и не разрешаются из значений параметров.

Что я действительно хочу сделать, так это иметь возможность запускать службу и передавать разные значения для Prop_BehavioursPath и Prop_AliasesPath. Есть ли лучший способ сделать это в Service Fabric?

Запускаемое приложение не знает о Service Fabric, и единственный способ протолкнуть к нему конфигурацию - это аргументы команды.

Ответы на вопрос(2)

вы можете определить переменные среды (скажем, Prop_AliasesPath иProp_BehavioursPath) в ServiceManifest.xml, а затем переопределить их значения в ApplicationManifest.xml. Тогда у вас есть два варианта:

Вариант 1. Даже если ваша точка входа MyProgram.exe не поддерживает сервисную фабрику, она может считывать переменные среды.

Вариант 2. Чтобы избежать чтения переменных среды внутри MyProgram.exe, вы можете использовать пакетный файл в качестве точки входа и вызывать из него «MyProgram.exe LoadFrom =% Prop_AliasesPath %% Prop_BehavioursPath%»

Больше информации о переопределении переменных среды:https://dzimchuk.net/using-code-package-environment-variables-in-service-fabric/

Решение Вопроса

что вы можете это сделать ... Вместо этого вы можете попробовать обходной путь, когда вы пишете небольшую оболочку .NET, которая читает конфигурацию sf, а затем запускает ваш гостевой исполняемый файл. Вы можете перенаправить stdin / stdout из дочернего процесса и подключиться к его завершенному событию, чтобы основной процесс завершился после завершения дочернего процесса.

 tommed23 апр. 2018 г., 00:21
Нет, из-за отсутствия ответа я сейчас использую Kubernetes в качестве своей инфраструктуры и действительно доволен сервисом / сообществом / поддержкой / документацией
 Raghu28 мая 2016 г., 16:01
Хотелось бы увидеть это, если вы обойдете это ... поскольку все, что он делает - запускает процесс, он должен работать для чего угодно.
 tommed28 мая 2016 г., 15:57
Люблю идею использования шаблона декоратора для дальнейшего абстрагирования среды выполнения, это определенно то решение, которое я искал!
 tommed28 мая 2016 г., 16:04
Я выложу ответ здесь, если найду более прямой маршрут
 Robar17 апр. 2018 г., 14:21
@tommed вы нашли более прямой маршрут? В настоящее время я сталкиваюсь с той же проблемой.

Ваш ответ на вопрос