11

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

エンド開発者(さまざまな部門)が簡単にできるようにするには、構成ファイルを編集してクライアントエンドポイントデータを設定する方法を知る必要がないことが最善です。

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

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

IF(configで説明)USE configfileELSEハードコードされたエンドポイントへのフォールバック。

私が見つけたのは:

  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)
}

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

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

4

2 に答える 2

11

構成セクションに特別なタイプのみを使用する、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

        }
于 2010-04-14T16:16:19.837 に答える
8

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

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」の「else」ブランチも扱い、それらを失敗ケースとして扱うようにしてください (構成が無効です)。

于 2009-06-18T06:41:40.767 に答える