在API后面抽象服务引用时管理WCF配置

时间:2011-02-18 20:08:41

标签: asp.net-mvc wcf configuration wcf-endpoint

我有一些通过WCF服务公开的域逻辑。我没有在我的MVC Web应用程序中显式编写WCF代理调用等,而是将WCF服务引用包装到他们自己的项目中 - MyProject.BizLogic.Endpoint - 然后将此项目的引用添加到我的Web应用程序中。 / p>

这对于保持控制器代码的清洁和可读性非常有用 - Endpoint公开了一个ICrmSystem接口,其中包含很好的抽象方法,如RetrieveCustomerDetails(int customerId),然后在端点类中,它被包装到CustomerQuery DTO中并在远程触发CustomerQueryHandler服务。对于隔离测试,您只需模拟ICrmSystem并针对模拟实现测试控制器方法。

事情是 - WCF需要大量神秘而精致的配置,目前我必须在我的web应用程序的web.config文件中拥有整个system.serviceModel绑定和客户端配置。

是否有更简洁的方法来管理此配置 - 最好是作为Endpoint抽象模块的一部分,以便Web开发人员甚至不需要知道WCF在幕后进行?我可以以某种方式将Endpoint的配置文件引用到我的Web应用程序中吗?或者以编程方式而不是以声明方式管理WCF配置?

谢谢,

迪伦

2 个答案:

答案 0 :(得分:2)

事实证明,您可以将配置部分隔离到一个单独的文件中,这样可以在保持配置隔离和仍然允许在运行时进行编辑之间取得良好的平衡。

我的Web.config现在包含:

<system.serviceModel>
    <bindings configSource="services/bindings.config" />
    <client configSource="services/myservice.endpoint.config" />
</system.serviceModel>

表示实际的端点端口/协议/等。可以在自己的子文件夹中隔离。此文件夹现在在我们的VCS中配置为外部(子模块),因此,如果我们更改一个基础架构 - 例如,将服务移动到不同的物理服务器上 - 我们可以更新配置,提交这些更改,更新任何项目依赖于这些配置部分,并避免在多个部署的应用程序中手动更新配置文件。

唯一需要注意的是,IIS不会像检测主Web.config一样检测到这些文件的更改,因此在修改之后,您需要触摸web.config或重新启动Web应用程序。除此之外,它的效果非常好。

答案 1 :(得分:1)

将其保留在配置中。我已经被保存了太多次,因为它能够立即在其他地方指向服务或者在运行中添加新的行为太多次来计算。 Coded = Compiled =难以改变