同じDBに繋ぐときとか一か所で設定を終えたいですよね。 ということで手順を備忘録的に残しておこうと思います。基本的には以下に書いてあることです。
Service Fabric での複数の環境の管理 | Microsoft Docs
Step1
サービスのプロジェクト/PackageRoot/COnfig/Settings.xmlに設定値を書く。これは設定を共通化したいプロジェクトが2個あったら2個ともにやります。
<?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"><!-- これは StateManager のレプリケーターにより使用されます。--><Section Name="ReplicatorConfig"><Parameter Name="ReplicatorEndpoint"Value="ReplicatorEndpoint" /></Section><!-- これは StateManager のレプリケーション トラフィックをセキュリティで保護するために使用されます。--><Section Name="ReplicatorSecurityConfig" /><!-- ここで、カスタム構成セクションとパラメーターを追加します。--><!--<Section Name="MyConfigSection"><Parameter Name="MyParameter" Value="Value1" /></Section> --><!-- これを追加 --><Section Name="UserDatabase"><Parameter Name="ConnectionString"Value="" /></Section></Settings>
Valueにはなんか書いてもかまいませんが、どうせ後で上書きされるので適当な値を突っ込んでおきましょう。
Step2
アプリケーションのプロジェクトのApplicationPackageRoot/ApplicationManifest.xmlのServiceManifestImportのConfigOverridesで先ほどの設定をオーバーライドする定義を追加します。これも2サービスあったら2つぶんやります。
Valueのところでかっこで囲っているのがパラメータ名になります。
<ServiceManifestImport><ServiceManifestRef ServiceManifestName="Stateful1Pkg"ServiceManifestVersion="1.0.0" /><ConfigOverrides><!-- こんな感じ --><ConfigOverride Name="Config"><Settings><Section Name="UserDatabase"><Parameter Name="ConnectionString"Value="[ConnectionString]" /></Section></Settings></ConfigOverride></ConfigOverrides><!-- ServicePackage から ServiceManifest をインポートします。ServiceManifestName と ServiceManifestVersion は、 ServiceManifest.xml ファイルで定義されている ServiceManifest 要素の [Name] 属性と [Version] 属性と 一致しなければなりません。--></ServiceManifestImport>
そして、同じファイルのParametersタグに先ほど追加したかっこで囲ったパラメータ名のパラメータを追加します。
<Parameters><Parameter Name="Stateful1_MinReplicaSetSize"DefaultValue="3" /><Parameter Name="Stateful1_PartitionCount"DefaultValue="1" /><Parameter Name="Stateful1_TargetReplicaSetSize"DefaultValue="3" /><Parameter Name="Stateless1_InstanceCount"DefaultValue="-1" /><!-- これを追加 --><Parameter Name="ConnectionString"DefaultValue="DefaultConnectionString" /></Parameters>
Step3
アプリケーションのプロジェクトのAplicationParametersフォルダの下にある構成単位のxmlファイルの中身を構成に合わせて設定します。 Local.Node1.xmlやLocal.Node5.xmlの場合はローカルDBの接続文字列とか、Cloud.xmlはSQL Databaseとかいった感じです。
こんな風になります。
<?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:/Application1"xmlns="http://schemas.microsoft.com/2011/01/fabric"><Parameters><Parameter Name="Stateful1_PartitionCount"Value="1" /><Parameter Name="Stateful1_MinReplicaSetSize"Value="1" /><Parameter Name="Stateful1_TargetReplicaSetSize"Value="1" /><Parameter Name="Stateless1_InstanceCount"Value="1" /><!-- これを追加 --><Parameter Name="ConnectionString"Value="Node1ConnectionString" /></Parameters></Application>
Step4
定義は完了です。あとはコードからの参照方法ですが以下のようなコードで出来ます。
this.Context .CodePackageActivationContext .GetConfigurationPackageObject("Config") .Settings .Sections["UserDatabase"] .Parameters["ConnectionString"] .Value
長いですね。記述場所はStatefulやStatelesの中になります。Contextにアクセスできれば何処で書いてもOKです。