【问题标题】:autofac wcf client configurationautofac wcf 客户端配置
【发布时间】:2016-07-13 17:38:55
【问题描述】:

我创建了一个 MVC 应用程序,它将调用 WCF 服务上的方法。我已将客户端应用程序配置为使用 autofac、autofac.integration.mvc 和 autofac.integration.wcf。我使用以下 autofac 注册码:

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 5、.NET 4.5.2。我想我可以从客户端的 web.config 中获取值,但我希望有一种更优雅的方式来确定端点地址。
  • 我听说有一种方法可以使端点可被发现,但我还没有尝试过。需要调查的东西。

标签: c# wcf autofac wcf-client


【解决方案1】:

这就是配置文件(以及作为奖励,配置转换)的目的!大多数 CI 服务器和部署平台甚至具有重写配置值的机制,以将您的开发环境与生产环境隔离开来。这只是一种很好的做法,没有更好的方法,尤其是考虑到除了你之外的其他人最终可能会为你正在构建的东西工作,他们会希望看到熟悉的东西到位!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2012-02-07
    • 2015-05-23
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多