로컬 및 클라우드의 두 가지 환경에서 Sql 데이터베이스, 스토리지 계정 등과 같은 리소스에 대한 사용자 지정 설정 또는 매개 변수를 어떻게 설정합니까? 데이터베이스, 로컬 또는 클라우드 환경에 대한 구성이 다릅니다. 감사합니다.
로컬 및 클라우드의 두 가지 환경에서 Sql 데이터베이스, 스토리지 계정 등과 같은 리소스에 대한 사용자 지정 설정 또는 매개 변수를 어떻게 설정합니까? 데이터베이스, 로컬 또는 클라우드 환경에 대한 구성이 다릅니다. 감사합니다.
답변:
Service Fabric을 로컬 및 클라우드에서 실행하기위한 환경 별 변수를 가지려면 다음을 수행해야합니다.
<?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>
<ServiceManifestImport>
에는 포함 된 각 프로젝트에 대한 요소 가 있습니다 . 그 아래 <ConfigOverrides>
에는 Service Fabric 프로젝트의 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>
<?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>
var configurationPackage = Context.CodePackageActivationContext.GetConfigurationPackageObject("Config");
var connectionStringParameter = configurationPackage.Settings.Sections["UserDatabase"].Parameters["UserDatabaseConnectionString"];
ServiceManifestImport
(의 자식 ApplicationManifest
) 를 정의해야 하지만 그 ConfigOverrides
안에 들어가야합니다 (의 자식 ServiceManifestImport
).
다른 애플리케이션과 마찬가지로 환경 변수를 사용할 수 있으며 , 기본 제공 서비스 패브릭 런타임이 필요한 것과 달리 서비스 패브릭 내에서 게스트 실행 파일 과 함께 작동 settings.xml
합니다.
응용 프로그램 내 GetEnvironmentVariable
에서 Environment
클래스 의 메서드를 통해 다른 .net 응용 프로그램과 마찬가지로 환경 변수에 액세스 할 수 있습니다 .
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>