WCF 客户端或者服务端,如何分离配置文件?

冰冷的小爪 2018-02-24 01:48:27
如题:
我做了一个网站,但是web.config已经臃肿了,如果添加服务引用,去调用其他服务器提供的服务,那么配置项就会设置到web.config中;
我现在的办法是自己实现客户端的创建,不依赖配置文件,但是这样很不和谐。
我想达到的效果是,将每个服务用单独的配置文件放,客户端直接new出来就完事了。
*类似于log4net的配置文件,也可以单独放,不过log4net是要设置AssemblyInfo.cs的。
...全文
413 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰冷的小爪 2018-02-25
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
那 msdn 的一个文档 https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/accessing-services-using-a-wcf-client 里边的 demo 代码为例,客户端代理类型 CalculatorClient 一共有 5 个实例化方法,那么编程中应该使用哪一个? “客户端直接new出来就完事了”这就太初级了,只有在你刚学 WCF 的时候才容易被微软忽悠。 因为假设你开发许多应用系统,甚至有多个开发人员,每一个人在自己的调试机器上运行,或者测试人员在自己的机器上运行,或者访问测试环境服务器,怎么可能是胡乱地去访问生产环境服务器?而且客户端怎么应对服务器地址配置变化问题? 真正的编程应该采用后边的初始化方法,比如说第5个初始化方法,也就是说应该写
CalculatorClient calcClient = new CalculatorClient(new xxxxxbindding...., GetServerUrl()));
代码而不是
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
代码。 msdn 上的例子给初学者看的,不是给实践开发者看的。专业程序员需要走开发流程、所以会要求程序动态地、自动地选择 ServerUrl,所以自然就会使用这个参数。 而你明确说明不用这个 remoteaddress参数,然后又竟然提一个“分离配置文件”的问题,自相矛盾!
您的意思是,还是自己实现客户端创建的这个过程比较好吗?
exception92 2018-02-24
  • 打赏
  • 举报
回复
将每个服务用单独的配置文件放 -》每个服务都可以放到services节点下,指定不同的address地址就可以实现一个代理服务提供多个service,当然前提是你的提供一个baseAddresses“基地址”,类似:

 <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/" />
          </baseAddresses>
        </host>
也就是要指定一个不带有服务名称的地址,这样保证在客户端进行服务更新时 能从正确的地址进行元数据交换。通过配置文件进行服务端,客户端的配置是相当方便的,反而比在程序中硬编码它的地址,契约,绑定要灵活的多。
  • 打赏
  • 举报
回复
WCF 产生的客户端代理 class 本身就有完善的接口设计,5个实例化方法写得清清楚楚。你非要“分离配置文件”这其实就是没有学习 WCF 而自己发明了。
  • 打赏
  • 举报
回复
那 msdn 的一个文档 https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/accessing-services-using-a-wcf-client 里边的 demo 代码为例,客户端代理类型 CalculatorClient 一共有 5 个实例化方法,那么编程中应该使用哪一个? “客户端直接new出来就完事了”这就太初级了,只有在你刚学 WCF 的时候才容易被微软忽悠。 因为假设你开发许多应用系统,甚至有多个开发人员,每一个人在自己的调试机器上运行,或者测试人员在自己的机器上运行,或者访问测试环境服务器,怎么可能是胡乱地去访问生产环境服务器?而且客户端怎么应对服务器地址配置变化问题? 真正的编程应该采用后边的初始化方法,比如说第5个初始化方法,也就是说应该写
CalculatorClient calcClient = new CalculatorClient(new xxxxxbindding...., GetServerUrl()));
代码而不是
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
代码。 msdn 上的例子给初学者看的,不是给实践开发者看的。专业程序员需要走开发流程、所以会要求程序动态地、自动地选择 ServerUrl,所以自然就会使用这个参数。 而你明确说明不用这个 remoteaddress参数,然后又竟然提一个“分离配置文件”的问题,自相矛盾!

110,476

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧