1

次の app.config ファイルを持つ WCF サーバーがあります。

<?xml version="1.0"?>
<configuration>   
  <system.serviceModel>   
    <services>
      <service name="MyService" behaviorConfiguration="DiscoveryBehavior">       
        <endpoint address="net.tcp://192.168.150.130:44424/ServerService/"/>        
        <endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint"/>
      </service>
    </services>
  </system.serviceModel> 
</configuration>

別のマシンへのインストール時に、アドレスをそのマシンのアドレスに自動更新するようにしたい。文字列はありますが、app.config ファイルの「アドレス」項目を更新する方法がわかりません。次のコードがありますが、これは機能しません。

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["address"].Value = "new_value";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings"); 

「appSettings」という名前のセクションがないため機能していないと思いますが、その「アドレス」項目にアクセスするにはどうすればよいですか? さまざまな解決策を試しましたが、何も機能しません。

前もって感謝します。

4

2 に答える 2

1

私はうまくいく解決策を見つけました。メモリ内のファイル全体を読み取り、ノードを見つけ、値を置き換えてからファイルを上書きします。これは、プログラムの初期化の前に、OnStartup メソッドで呼び出されます。

XmlDocument doc = new XmlDocument();
doc.Load("MyApp.exe.config");
XmlNodeList endpoints = doc.GetElementsByTagName("endpoint");
foreach (XmlNode item in endpoints)
{
    var adressAttribute = item.Attributes["address"];
    if (!ReferenceEquals(null, adressAttribute))
    {
        adressAttribute.Value = string.Format("net.tcp://{0}:44424/ServerService/", MachineIp);
    }
}
doc.Save("MyApp.exe.config");
于 2012-10-04T06:17:15.040 に答える