【问题标题】:WCF: Is configuration in App.config better than in hard-coded in custom Proxy class?WCF:App.config 中的配置是否比自定义代理类中的硬编码更好?
【发布时间】:2016-03-10 08:58:10
【问题描述】:

首先this 不是重复的。我有一点不同的问题。

在客户端(或跨平台项目的客户端)中删除 App.config 文件中的 WCF 配置并将其替换为注入的 Proxy 类(来自不同的 dll,为所有客户端共享)是一种好习惯)?

我刚开始,所以我的配置文件不大,但这里有一个例子:

App.config(WCF 部分):

<system.serviceModel>
  <client>
    <endpoint address="net.tcp://localhost:8002/MyService"
              binding="netTcpBinding"
              contract="CallbackExample.Client.IMyService" />
  </client>
</system.serviceModel>

我必须将此代码复制并粘贴到我创建的每个客户端中。使用 Xamarin 我可以在单个 VS 解决方案中使用 C# 编写许多客户端。所以我为什么不干脆去掉system.serviceModel 部分并这样做:

MyServiceProxy.cs:

public class MyServiceProxy : ClientBase<IMyService>, IMyService
{
    public MyServiceProxy()
        : base(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8002/MyService"))
    {
    }

    public int JustAMethod()
    {
        return Channel.JustAMethod();
    }
}

这样,我将把我的配置放在一个地方。

所以,我的问题是:这被认为是一种好的做法吗?有更好的方法吗?我不确定,因为 WCF 就是通过 App.config flye 实现灵活性和轻松配置。

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    如果不需要额外的配置,我总是选择纯代码解决方案。

    过去 WCF 通过 app.conf 配置起来稍微复杂一些。使用ServiceHost,您甚至可以用纯代码配置 WCF 服务。

    这同样适用于 WCF 客户端 imo;如果您不需要通过配置文件为您的用户配置它:我会说选择纯代码解决方案。

    Here 同一主题的另一个讨论。 (类似的推理,问题仍然存在;您是否需要配置灵活性)。

    【讨论】:

    • 谢谢,当我需要通过配置进行配置时,你能给我一个例子吗?什么时候用 App.config 比较好?
    • @Tom,请参阅相关的 SO 主题。我刚刚为 zwave 控制器解决方案编写了一个 WCF 客户端/服务。我对用户更改端口和东西没有任何要求。只需要像在专用设备上一样使用我的整个软件堆栈。我想这些要求对你的决定很重要。如果您计划分发您的客户端/服务应用程序,那么让您的用户决定打开哪个端口是有意义的
    【解决方案2】:

    在代码中做所有事情的一个潜在缺点是,您不仅失去了配置端点的灵活性,而且还失去了绑定的灵活性,而无需重新编译和重新部署。绑定包括一些重要的网络相关属性(超时、传输保护级别、授权方案等),您可能需要根据某些客户端程序可以运行的环境来调整这些属性。

    请注意,您不必为每个客户端应用程序都有一个单独的 *.exe.config 文件。您可以拥有每个应用程序都可以显式加载的通用 .config 文件。见ConfigurationManager.OpenMappedExeConfiguration

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多