Вы пробовали следующую команду: New-ServiceFabricApplication
?
Когда вы создаете файл манифеста приложения, параметры будут содержать заменяемые параметры, которые вы устанавливаете при регистрации нового приложения.
Пример ApplicationManifest.xml, подобный этому:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="MyAppTypeName" ApplicationTypeVersion="1.0.0" xmlns=...>
<Parameters>
<Parameter Name="Web1_InstanceCount" Value="-1" />
<Parameter Name="ENVIRONMENT_NAME" Value="DEV" />
<Parameter Name="FEPlacementConstraints" Value="NodeTypeName==FrontEnd" />
</Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<EnvironmentOverrides />
</ServiceManifestImport>
<DefaultServices>
<Service Name="Web1">
<StatelessService ServiceTypeName="MyServiceType" InstanceCount="[Web1_InstanceCount]">
<SingletonPartition />
<PlacementConstraints>[FEPlacementConstraints]</PlacementConstraints>
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
Вы могли бы изменить файл настроек, используя переопределения конфигурации следующим образом:
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="MyConfigSection">
<Parameter Name="MySetting" Value="[ENVIRONMENT_NAME]"/>
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
Или вы можете установить переменные окружения в вашем сервисе так:
<EnvironmentOverrides CodePackageRef="Code">
<EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[ENVIRONMENT_NAME]" />
</EnvironmentOverrides>
По моему мнению, переопределения среды лучше сработают в вашем случае,
потому что большинство гостевых исполняемых файлов не очень гибки в настройке, но обычно они принимают переменные среды.
Тогда вы:
.
New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-dev -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='DEV'}
New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-uat -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='UAT'}
Единственный недостаток этого подхода заключается в том, что в итоге вы получите два приложения, но не думайте, что это будет для вас проблемой, они будут управляться в основном так же, как и в одном приложении.
если вам строго необходимо запустить оба вместе в одном приложении, вы можете сделать несколько обходных путей:
Использование нескольких пакетов Config (не думаю, что будет хорошо работать с гостевыми исполняемыми файлами, но хорошо работает с надежными сервисами
Используя сценарий запуска, где вы добавляете логику для передачи параметра в исполняемый файл, что-то вроде следующего:
В вашем ServiceManifest.xml :
<CodePackage Name="Code" Version="1.0.0">
<EntryPoint>
<ExeHost>
<Program>start.bat</Program>
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
</CodePackage>
В той же папке (коде) вашего .exe, вы создаете файл start.bat со следующим содержимым:
myApp.exe %EnvironmentVariableNameSetBySF%