ローカルとクラウドの2つの環境では、SQLデータベース、ストレージアカウントなどのリソースのカスタム設定またはパラメーターをどのように設定しますか?理想的には、コードで呼び出される1つのパラメーター名で、DbContextを特定の方向に向けます。データベース。ローカル環境とクラウド環境のどちらの構成でも異なります。ありがとうございました。
ローカルとクラウドの2つの環境では、SQLデータベース、ストレージアカウントなどのリソースのカスタム設定またはパラメーターをどのように設定しますか?理想的には、コードで呼び出される1つのパラメーター名で、DbContextを特定の方向に向けます。データベース。ローカル環境とクラウド環境のどちらの構成でも異なります。ありがとうございました。
回答:
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>
、ServiceFabricプロジェクトの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>