4

首先,如果以前有人问过这个问题,我深表歉意,但我找不到任何可以直接回答这个问题的东西。

这是我的问题。我继承了一个产品,它的设计非常灵活,以至于填充(silverlight)表单上的几乎每个组合框和文本块都需要服务请求。有些屏幕需要超过 15 个单独的请求才能填充!

现在,我曾多次使用 WCF Web 服务,并且将服务合同拆分为小的离散操作从未受到太大影响,..遗憾的是,这个项目并非如此。所以它让我想知道......

没有计划服务暴露在我们自己的墙外。没有计划为此特定服务编写另一个客户端。那么我不能在服务端写一个“用例控制器”吗?所以,在“创建投诉”屏幕中,而不是有一个请求列表,比如......

  1. 获取投诉类型
  2. 获取客户类型
  3. 获取区域详细信息
  4. 等等...

要填充表单,我只需一个名为“GetCreateComplaintData”的操作合同。当只有一个客户端必须将所有这些请求聚合并同步为有意义的东西时,以如此粒度公开这么多操作似乎很疯狂。为什么不首先暴露一些有意义的东西呢?

更重要的是,如果您不打算将服务 API 公开给第三方,这难道不是比公开数据库中表的 CRUD 操作更好的策略吗?

感谢所有帮助和意见。提前致谢。

4

5 回答 5

2

我觉得你的想法很OK。

作为一种中间方式,您还可以考虑将多个 WCF 请求批处理为一个的方法。此处描述了这种方法以及如何对其进行编程。

于 2010-08-31T12:11:36.770 回答
1

我认为您首先必须确定性能问题的确切位置。IIS 真的无法处理您发送给它的请求数量吗?还是每个单独的请求都花费了太长时间,因为数据库无法提供您的数据,并且看起来 IIS 无法处理压力。

我不确定以下两种情况之间是否存在真正的区别:

  • 每个执行数据库选择语句的小请求。
  • 一个执行大量数据库选择语句的大型请求。

当然,我不确定您的具体情况,但在性能方面,事先确切地知道您为什么要优化总是明智的。

于 2010-08-31T12:29:49.457 回答
1

业务逻辑之上的 WCF 服务应该暴露高级业务操作的外观,而不是低级 CRUD 操作。CRUD 操作服务用于暴露数据(如 WCF 数据服务)。

于 2010-08-31T12:31:56.350 回答
1

这是我对这一切的看法。答案一如既往,视情况而定。

下面是一些关于如何使用 WCF 构建 SOA 的实际示例。

我建议您阅读 Thomas Erl 和 Roger Sessions 的文章,这将使您牢牢掌握 SOA 的全部内容。

构建 SOA

SOA 设计模式

在 SOA 中实现完整性

为什么你的 SOA 应该像大众甲壳虫

SOA 为你的老板解释

于 2010-09-02T08:18:55.700 回答
0

使用带有 WCF 的 CRUD 模式从数据库公开数据的最简单方法是使用 WCF 数据服务。实际上,除了要公开的模型之外,您实际上并没有在服务器端开发任何东西,如果您使用 EF 模型来访问数据库,它也可以从 EF 模型中自动推断出来。

巴勃罗。

于 2010-09-02T16:03:40.220 回答