.net 多个客户端的流畅WCF(代码内)配置/托管?

.net 多个客户端的流畅WCF(代码内)配置/托管?,.net,wcf,.net,Wcf,在代码中配置WCF不需要更多地耦合模型库和服务库吗 如果我理解正确,您可以在与使用的服务相同的项目中用代码配置主机。然后在客户端上配置通道,但是客户端必须知道模型,这意味着如果有多个客户端应用程序使用该服务,它们都必须引用模型(或您正在使用的任何东西)程序集 因此,我认为在涉及多个客户端时,代码配置/托管不是最佳选择?您可以从代码配置WCF,而无需创建比使用配置文件更多的耦合 我喜欢使用以下分区: 服务器: 一个用于数据协定(型号/DTO)的程序集 一个用于服务契约(WCF接口)的程序集 一个

在代码中配置WCF不需要更多地耦合模型库和服务库吗

如果我理解正确,您可以在与使用的服务相同的项目中用代码配置主机。然后在客户端上配置通道,但是客户端必须知道模型,这意味着如果有多个客户端应用程序使用该服务,它们都必须引用模型(或您正在使用的任何东西)程序集


因此,我认为在涉及多个客户端时,代码配置/托管不是最佳选择?

您可以从代码配置WCF,而无需创建比使用配置文件更多的耦合

我喜欢使用以下分区:

服务器:
  • 一个用于数据协定(型号/DTO)的程序集
  • 一个用于服务契约(WCF接口)的程序集
  • 一个用于服务实现的程序集
  • 一个用于服务主机创建逻辑的程序集。该程序集将包含一个类(WCFHostsLoader),该类实例化所有端点的服务主机
  • 一个连接WCF主机的程序。在ASP.Net下,可能是Globas.asax。在Globas.asax中,可以调用WCFHostsLoader.Configure()
客户: 客户是一个完全不同的问题。您暗示客户端必须与服务器共享相同的程序集(型号)。尽管这是可能的(这是我们在项目中所做的);这不是强制性的

选项1是共享相同的模型部件和服务合同部件。就我而言,如果客户端应用程序是用.Net编写的(由您或您可以向其提供两个必需程序集的一方编写),那么这是最好的方法。主要的优点是,在客户机上,您不会得到一堆丑陋的生成类。我也认为这种方法更优雅。去看看这张照片。在纯代理模式中,不将参数(模型)代理给被代理的服务

选项2是使用从服务器的WSDL生成的一组代理类。我认为这更常见,因为a)VisualStudio的添加服务引用使这变得容易。b) 如果客户端不是.Net,则它是唯一的选项。如果使用VisualStudio的Add Service引用生成的类,您可能很难控制通道工厂创建过程,从而从代码而不是从配置文件配置所有内容(我从未尝试过这样做)。可能存在其他工具来生成代码配置更友好的代理类


我希望这有帮助

Fluent不是从代码而不是从配置文件进行配置;它是关于通过创建某种内部DSL来使用提供特定编程风格的API。据我所知,WCF没有流畅的API。是的,这两个也是我想到的。我同意WSDL代理很难看,但它确实与其他程序集解耦,而不必每次发生变化时都在多个客户端中更新程序集引用。使用WSDL时,依赖性也非常强。如果您更改WSDL,很可能是一个突破性的更改。因此,确实不必在多个客户端中更新程序集引用,但必须在多个客户端中重新生成服务引用(代理)。如果您控制客户端应用程序,更新程序集可能比重新生成代理类更快更容易。谢谢您的回复。是的,我同意也必须更新服务引用,但是对于位于不同服务器上的应用程序,我认为更新服务引用比手动移动程序集更容易。这不是很大的区别,但仍然是一个区别。我宁愿不处理WCF,而是处理多个客户端和不同的服务器,这可能是最好的。