2016-07-13 8 views
0

私は、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)); 
+0

あなたは設定ファイルをどこかに置くことを考えましたか? app.config、またはjsonファイル。使用しているMVCのバージョンについては言及していないので、どのMVCが適切かはわかりません。 –

+0

私はMVC 5、.NET 4.5.2を使用しています。私はクライアントのweb.configから価値を得ることができたと思うが、私はエンドポイントアドレスを決定するよりエレガントな方法があると思っていた。 – pjanssen007

+0

エンドポイントを検出可能にする方法があると聞いていますが、試していません。見るべきこと。 –

答えて

0

これは、設定ファイル(および設定変更)が行われた理由です。ほとんどのCIサーバーとデプロイメントプラットフォームでは、開発環境を運用から保護するために構成値を書き換えるためのメカニズムがあります。それはちょうどよい練習であり、より良い方法はありません。特に、あなた以外の誰かが最終的にあなたが構築していることに取り組むかもしれないと考えて、彼らは場所に精通した何かを見たいと思うでしょう!

関連する問題