2010-12-06 5 views
1

アプリケーション構成ファイルを書き換えずにサービス・ホストのベース・アドレスを変更する

app.config app.config app.config app.config app.config app.config app.config app.config

モチベーション:ベースアドレスにinstanceNameを追加するためにWCFサービスホストを起動する前に、ホストベースアドレスを調整しようとしています。同じマシン上で同じエージェントプロセスを何度も実行できるようにしたい。各インスタンスは、コマンドラインで指定された別名を持ちます。ホスト名は、ホストのベースアドレスに組み込む必要があります。 これは、app.configにbaseAddressesコレクションがまったく含まれていないと簡単に実行できます。しかし、インスタンス名が与えられていない単一のエージェントプロセスが実行される場合は、そこに存在したいと思います。

問題は、サービスホストがコンストラクタで与えられたベースアドレスをapp.configに現れるものとマージすることです。もちろん、httpスキームで2つのアドレスを検出するため、例外が発生して失敗します。

また、実行中のインスタンスに応じて、WCFアドレスを変更しようとすると、主流のWCFの哲学に従っていますか?私がハックの迷路で迷子になってしまった場合 - 道をメイン道路に戻してください。

答えて

0

本当に簡単なアプローチを考えてみましょう。ベースアドレスがない場合にインスタンスに接続する方法が既にある場合は、ベースアドレスを削除します。次に、基本アドレスとデフォルトインスタンス名をapp.config appsetingsセクションに配置します。次に、コマンドラインで指定されたベースアドレスとインスタンス名をコードに結合します。インスタンス名が指定されていない場合は、appSettingsのDefaultInstance名を使用します。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="BaseAddress" value="http://localhost:8001/" /> 
    <add key="DefaultInstance" value="MyAgent" /> 
    </appSettings> 
</configuration> 

また、完全な開示のために、このコードでこれらの値を簡単に読み取ることができます。

System.Configuration.ConfigurationManager.AppSettings["BaseAddress"] 
+0

これは現在の動作です。私は特に、実際にディスクに保存することなく、プログラムで有機WCFの設定を変更することが可能かどうかを知りたいと考えています。 – mark

関連する問題