WCF:App.config中的配置是否比自定义代理类中硬编码的配置更好

本文关键字:配置 代理 更好 编码 自定义 是否 App config WCF | 更新日期: 2023-09-27 18:25:42

首先,这是不重复的。我有一个不同的问题。

在客户端(或跨平台项目的客户端)的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文件轻松配置的。

WCF:App.config中的配置是否比自定义代理类中硬编码的配置更好

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

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

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

这里是对同一主题的另一次讨论。(同样的道理,问题仍然存在;您需要配置灵活性吗?)。

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

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