programing

서비스 패브릭에 대한 환경별 런타임 구성 매개 변수를 설정하고 액세스하는 위치는 무엇입니까?

testmans 2023. 5. 25. 21:36
반응형

서비스 패브릭에 대한 환경별 런타임 구성 매개 변수를 설정하고 액세스하는 위치는 무엇입니까?

로컬 및 클라우드의 두 가지 환경에서 SQL 데이터베이스, 스토리지 계정 등과 같은 리소스에 대한 사용자 지정 설정 또는 매개 변수를 설정하려면 어떻게 해야 합니까?이상적으로는 로컬 또는 클라우드 환경에 대한 구성이 다르다는 것을 특정 데이터베이스를 가리키는 DbContext를 코드로 호출하는 매개 변수 이름입니다.감사해요.

서비스 패브릭을 로컬 및 클라우드에서 실행하기 위한 환경별 변수를 설정하려면 다음 작업을 수행해야 합니다.

  1. 사용자 지정 구성 섹션 및 매개 변수를 \PackageRoot\Config\에 있는 Service/Actor 프로젝트의 Settings.xml 파일에 추가합니다.프로젝트 루트의 settings.xml).환경별로 다른 곳에서 설정할 것이므로 매개 변수를 비워 둡니다.여기 예시가 있습니다.
<?xml version="1.0" encoding="utf-8" ?>
<Settings 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">
<!-- Add your custom configuration sections and parameters here -->
    <Section Name="UserDatabase">
        <Parameter Name="UserDatabaseConnectionString" Value="" />
    </Section>
</Settings>
  1. 에는 ApplicationManifest.xml 파일이 .<ServiceManifestImport>포함된 각 프로젝트에 대한 요소.에는 그아에는래가 입니다.<ConfigOverrides>여기서 서비스 패브릭 프로젝트의 ApplicationParameters 아래에 있는 로컬 및 클라우드 xml 파일에서 환경별로 설정된 값으로 대체할 구성 값을 선언합니다.동일한 ApplicationManifest.xml 파일에서 로컬 및 클라우드 xml 파일에 있는 매개 변수를 추가해야 합니다. 그렇지 않으면 빌드 시 해당 매개 변수를 덮어씁니다.

위의 예를 계속해서 다음과 같이 설정합니다.

<Parameters>
    <Parameter Name="ServiceName_InstanceCount" DefaultValue="-1" />
    <Parameter Name="UserDatabaseConnectionString" DefaultValue="" />
</Parameters>
<ConfigOverrides>
    <ConfigOverride Name="Config">
        <Settings>
            <Section Name="UserDatabase">
                <Parameter Name="UserDatabaseConnectionString" Value="[UserDatabaseConnectionString]" />
            </Section>
        </Settings>
    </ConfigOverride>
</ConfigOverrides>
  1. 서비스 패브릭 프로젝트의 ApplicationParameters 아래에 있는 local.xml 및 cloud.xml 파일에서 환경별 변수를 지정합니다.
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="ServiceName_InstanceCount" Value="1" />
        <Parameter Name="UserDatabaseConnectionString" Value="Server=(localdb)\MsSqlLocalDb;Database=Users;User=ReadOnlyUser;Password=XXXXX;" />
    </Parameters>
</Application>
  1. 마지막으로 서비스/액터에서 이와 같은 환경별 구성 변수에 액세스할 수 있습니다.
var configurationPackage = Context.CodePackageActivationContext.GetConfigurationPackageObject("Config");

var connectionStringParameter = configurationPackage.Settings.Sections["UserDatabase"].Parameters["UserDatabaseConnectionString"];

다른 애플리케이션과 마찬가지로 환경 변수를 사용할 수 있습니다. 이는 서비스 패브릭 내의 게스트 실행 파일에서도 작동합니다.settings.xml기본 제공 서비스 패브릭 런타임이 필요하기 때문입니다.

프로그램 응용 수 .net 응용 프로그램은 .net 응용 프로그램과 동일하게 사용할 수 .GetEnvironmentVariable의 방법Environment클래스:

var baseUri = Environment.GetEnvironmentVariable("SuperWebServiceBaseUri");

그런 다음 몇 가지 기본 환경 변수 값을 설정해야 합니다. 이 값은 다음과 같습니다.ServiceManifest.xml서비스의 매니페스트 파일입니다.

<?xml version="1.0" encoding="utf-8" ?>
<ServiceManifest Name="MyServicePkg" Version="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- snip -->
    <CodePackage Name="Code" Version="1.0.0">
        <!-- snip -->
        <EnvironmentVariables>
            <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="http://localhost:12345"/>
        </EnvironmentVariables>
    </CodePackage>
    <!-- snip -->
</ServiceManifest>

그런 다음 이러한 환경 변수를 사용자 환경 내에서 재정의할 수 있습니다.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" ApplicationTypeName="ChileTargetType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <!-- snip -->
    </Parameters>
    <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
        <EnvironmentOverrides CodePackageRef="Code">
            <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="https://the-real-live-super-base-uri.com/"/>
        </EnvironmentOverrides>
    </ServiceManifestImport>
    <!-- snip -->
</ApplicationManifest>

그러면 다른 애플리케이션 매니페스트 설정처럼 매개 변수화할 수 있습니다.local.xml그리고.cloud.xml.

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="MyService_SuperWebServiceBaseUri" Value="https://another-base-uri.com/" />
    </Parameters>
</Application>

그러면 우리는 업데이트를 해야 할 것입니다.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" ApplicationTypeName="ChileTargetType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="MyService_SuperWebServiceBaseUri" DefaultValue="https://the-real-live-super-base-uri.com/" />
    </Parameters>
    <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
        <EnvironmentOverrides CodePackageRef="Code">
            <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="[MyService_SuperWebServiceBaseUri]"/>
        </EnvironmentOverrides>
    </ServiceManifestImport>
    <!-- snip -->
</ApplicationManifest>

위의 답변은 어떻게 수행되는지 잘 설명합니다.저는 사이드마크를 추가하고 싶습니다. 왜 그것이 '뒤얽힌' 것인지에 대한 이유입니다.

서비스가 자체적으로 포함되도록 의도되었기 때문에 이러한 방식이어야 합니다.연결된 모든 응용프로그램에서 기본적으로 실행되어야 합니다.응용프로그램의 매니페스트와 무관합니다.따라서 서비스는 적어도 자체 구성에서 미리 정의된 매개 변수에만 의존할 수 있습니다.

그런 다음 응용 프로그램에서 이러한 사전 설정을 덮어쓸 수 있습니다.이것이 유일한 보편적 접근법입니다.

언급URL : https://stackoverflow.com/questions/33928204/where-do-you-set-and-access-run-time-configuration-parameters-per-environment-fo

반응형