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文件轻松配置的。
如果不需要额外的配置,我总是选择纯代码解决方案。
在过去,通过app.conf配置WCF稍微复杂一些。使用ServiceHost
,您甚至可以用纯代码配置WCF服务。
这同样适用于WCF客户端imo;如果您不需要通过配置文件为用户配置它:我想选择纯代码解决方案。
这里是对同一主题的另一次讨论。(同样的道理,问题仍然存在;您需要配置灵活性吗?)。
在代码中执行所有操作的一个潜在缺点是,您失去了不仅配置端点,而且配置绑定的灵活性,而无需重新编译和重新部署。绑定包括一些重要的网络相关属性(超时、传输保护级别、授权方案等),您可能需要根据某些客户端程序可以运行的环境进行调整。
请注意,不一定每个客户端应用程序都有一个单独的*.exe.config文件。您可以有一个通用的.config文件,每个应用程序都可以显式加载该文件。请参阅ConfigurationManager.OpenMappedExeConfiguration