1

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

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

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

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

谢谢,

迪伦

4

2 回答 2

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 应用程序。除此之外,它工作得很好。

于 2011-02-21T17:32:44.460 回答
1

将其保存在配置中。由于能够立即将服务指向其他地方或在运行中添加新行为太多次,我已经被拯救了太多次。编码 = 编译 = 更难改变

于 2011-02-18T20:24:13.747 回答