私は、WCFサービスでメソッドを呼び出すMVCアプリケーションを作成しました。 autofac、autofac.integration.mvc、およびautofac.integration.wcfを使用するようにクライアントアプリケーションを設定しました。私はそれが次autofac登録コードで作業している:autofac wcfクライアントの設定
var builder = new ContainerBuilder();
builder
.Register(c => new ChannelFactory<IUserService>())
.SingleInstance();
builder
.Register(c => new ChannelFactory<IUserService>(
new BasicHttpBinding(),
new EndpointAddress(@"http://localhost:36763/UserService.svc")))
.SingleInstance();
builder
.Register(c => c.Resolve<ChannelFactory<IUserService>>().CreateChannel())
.As<IUserService>()
.UseWcfSafeRelease();
しかし、私は、エンドポイントのアドレスをハードコーディングを避けることができるようにしたいと思います。エンドポイントアドレスをハードコーディングせずにこれを行う方法はありますか?
更新。私はエンドポイントアドレスをハードコーディングせずに動作する下記のコードを試しました。しかし、それはUserServiceClientへの依存をもたらします。
var builder = new ContainerBuilder();
string endpointAddress;
using (var userServiceClientProxy = new UserServiceClient())
{
endpointAddress = userServiceClientProxy.Endpoint.Address.Uri.OriginalString;
}
builder
.Register(c => new ChannelFactory<IUserService>(
new BasicHttpBinding(),
new EndpointAddress(endpointAddress)))
.SingleInstance();
builder
.Register(c => c.Resolve<ChannelFactory<IUserService>>().CreateChannel())
.As<IUserService>()
.UseWcfSafeRelease();
builder.Register(l => LogManager.GetLogger(nameof(WcfClient2))).As<ILog>()
.SingleInstance();
builder.RegisterControllers(Assembly.GetAssembly(typeof(HomeController)));
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
あなたは設定ファイルをどこかに置くことを考えましたか? app.config、またはjsonファイル。使用しているMVCのバージョンについては言及していないので、どのMVCが適切かはわかりません。 –
私はMVC 5、.NET 4.5.2を使用しています。私はクライアントのweb.configから価値を得ることができたと思うが、私はエンドポイントアドレスを決定するよりエレガントな方法があると思っていた。 – pjanssen007
エンドポイントを検出可能にする方法があると聞いていますが、試していません。見るべきこと。 –