WCFクライアント構成:エンドポイントが構成ファイルにあるかどうかを確認し、ない場合はコードにフォールバックできますか?

StackOverflow https://stackoverflow.com/questions/1009757

質問

シリアル化されたメッセージオブジェクトをWCF経由でサーバーに送信するクライアントを作成することを検討しています。

エンド開発者(部門が異なる)が作業を簡単にするためには、構成ファイルを編集してクライアントエンドポイントデータをセットアップする方法を知る必要はありません。

それはまた、エンドポイントがクライアントに埋め込まれていない/ハードコードされていないことも素晴らしいことです。

ミックスシナリオは、展開する最も簡単なソリューションであるように思われます。

IF(configで説明)構成ファイルを使用して、ハードコーディングされたエンドポイントにELSEフォールバックします。

私が見つけたのは:

  1. new Client(); は、構成ファイル定義が見つからない場合に失敗します。
  2. new Client(binding、endpoint); は動作します

したがって:

Client client;
try {
  client = new Client();
}catch {
  //Guess not defined in config file...
  //fall back to hard coded solution:
  client(binding, endpoint)
}

しかし、設定ファイルにエンドポイントが宣言されているかどうかを確認するための check (try / catch以外の)方法はありますか?

設定ファイルで定義されていても、正しく設定されていなくても上記は失敗しませんか? 2つの条件を区別するとよいでしょうか?

役に立ちましたか?

解決

構成ファイルを読み取り、管理しやすいオブジェクトにデータをロードする方法は次のとおりです。

Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("system.serviceModel");
if (csg != null)
{
    ConfigurationSection css = csg.Sections["client"];
    if (css != null && css is ClientSection)
    {
        ClientSection cs = (ClientSection)csg.Sections["client"];
        //make all your tests about the correcteness of the endpoints here
    }
}

" cs"オブジェクトは" endpoints"という名前のコレクションを公開します設定ファイルにあるすべてのプロパティにアクセスできます。

「その他」も処理するようにしてください。 " if"の分岐を失敗ケースとして扱います(構成は無効です)。

他のヒント

構成セクションに特別なタイプのみを使用する AlexDrenea ソリューションの改良版を提案したいと思います。

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ServiceModelSectionGroup serviceModelGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
        if (serviceModelGroup != null)
        {
            ClientSection clientSection = serviceModelGroup.Client;
            //make all your tests about the correcteness of the endpoints here

        }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top