WCF クライアントのエンドポイントを指定する際の注意点

ChannelFactory クラスを使って WCF クライアントを生成する場合、クライアントが接続するエンドポイントの情報を、コードまたは構成ファイルで指定する必要がある。また、構成ファイルで指定する場合は、エンドポイント構成名も指定する必要がある。構成名を指定しない場合、アドレスやバインディングをコードで設定しておかないと例外が発生してしまう。

// エンドポイント情報を構成ファイルに記述している場合、
// エンドポイント構成名をコンストラクタで指定する必要あり。
ChannelFactory<ISampleService> factory = new ChannelFactory<ISampleService>("test");
ISampleService channel = factory.CreateChannel();
channel.Greeting("Bob");

ClientBase クラスから派生した WCF クライアントの場合も、エンドポイントの情報はコードか構成ファイルで指定する必要がある。構成ファイルに記述してあるエンドポイントが、サービスに1つだけの時に限り、エンドポイント構成名は指定しなくてもいい。複数ある場合は構成名を指定しておかないと、エンドポイントを特定できずに例外が発生する。

// 構成ファイルに記述してあるエンドポイントが1つだけの時は、
// コンストラクタでエンドポイント構成名を指定しなくてもいい。
SampleServiceClient client = new SampleServiceClient();
client.Greeting("Bob");

// 複数記述してある場合は例外が発生するので、
// 構成名を指定する必要がある。
// SampleServiceClient client = new SampleServiceClient("test");
// client.Greeting("Bob");

結論。WCF クライアントのエンドポイントを構成ファイルで指定するなら、構成名も指定しておく方が無難。