WCF Web サービスを呼び出すサードパーティ コンポーネントを使用する Silverlight アプリケーションを開発しています。残念ながら、このコンポーネントではエンドポイントの構成名を指定できません。代わりに、ハードコードされたエンドポイント名、たとえばTheEndpoint
. C# コードによって検出されるいくつかの条件に基づいて、さまざまなエンドポイント構成から選択できるようにする必要があるため、これは問題です。新しいクライアント チャネルを作成するたびに使用できるため、WCF は App.config で定義されているこれらのエンドポイントの何らかのリポジトリを維持していると思います。このリポジトリに新しいエンドポイントを挿入することは可能ですか? 私はこのようなことができるようにしたいと思います:
bool useSSL = ...;
var mode = useSSL ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None;
var binding = new BasicHttpBinding(mode) {Name = "TheEndpoint"};
var address = (useSSL ? "https" : "http") + "://example.com/service.svc";
MagicalWcfEndpointRepository.AddClientEndpoint(
typeof(ITheInterface), binding, address);
これについてグーグルで検索すると、エンドポイントを動的に作成する方法に関するヒントがたくさん見つかりますが、それらはすべて、クライアント チャネルを自分で作成することを前提としています。ここではそうではありません。コンポーネントには、直接インスタンス化する独自のクライアント プロキシがあり、別のチャネルまたはチャネル ファクトリを挿入する方法はありません。また、config トランスフォームを使用して App.config の内容を変更できることはわかっていますが、それにより、アプリケーションの個々のインストールが 1 つの特定のエンドポイントに関連付けられることになります。各アプリケーションが起動時に異なるエンドポイントを選択できるようにしたいと考えています。これは可能ですか?