Web/App.config ファイルでクライアント エンドポイントを明示的に定義しないと、Windsor WCF 機能でクライアント エンドポイントを生成できません。
コントラクト、クライアント、およびコールバックはサービス参照として生成されました。構成ファイルを使用せずにプログラムですべてを登録したいと考えています。ただし、エンドポイント情報が App/Web.config に存在しない場合、次のエラーが発生します。
エラー: ServiceModel クライアント構成セクションで、コントラクト 'ServiceReference1.IWcfContract' を参照する既定のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素に見つからなかったためである可能性があります。
登録
Component.For<IWcfContract>()
.ImplementedBy<WcfContractClient>()
.AsWcfClient(new DefaultClientModel(
WcfEndpoint
.ForContract<IWcfContract>()
.BoundTo(MyConfig.NetTcpBinding)
.At(MyConfig.WcfHostAddressAndPort)),
.LifestyleTransient());
Component.For<IWcfContractClientFactory>()
.AsFactory(new WcfContractClientFactorySelector())
型付き工場
IWcfContractCreate(WcfContractClientCallback callback);
void Release(IWcfContractinstance);
ファクトリーセレクター
public class WcfContractClientFactorySelector : DefaultTypedFactoryComponentSelector
{
protected override IDictionary GetArguments(MethodInfo method, object[] arguments)
{
Arguments args = new Arguments();
args.Add("callbackInstance", new InstanceContext(arguments[0]));
return args;
}
}
クライアントの解決
IWcfContractClientFactory factory = container.Resolve<IWcfContractClientFactory>();
IWcfContract client = factory.Create(new WcfContractClientCallback());
この時点で、Web/App.config ファイルにエンドポイント情報があれば、すべて正常に動作します。取り出すと、上記のエラーが表示されます。ありがとう!