是否存在太多WCF服务?

mic*_*ael 6 c# performance wcf

我有点问题,我不确定如何解决它.我有我的模型组件,其中包含大约200个不同的业务对象(订单,客户,产品等).

当有人想要获得订单时,我不想返回整个对象图.相反,我想简单地返回对象和延迟加载(甚至异步加载)其他部分.这似乎会导致许多"获取(对象名称)"服务:

  • GetOrder(int id)
  • GetCustomer(int id)
  • GetProduct(int id)
  • 等等

我不想创建200种不同的方法,每种方法对应一次Get操作.我意识到我可以做类似的事情GetObject(string type, int id),然后以某种方式使用反射来获得适当的对象,但我认为这更糟糕(可能).

相反,如果我使用T4模板自动完成创建每个不同服务的工作,那会更好......但它仍然让我担心一件事...... 性能.

是否有暴露200多种不同的服务(每个对象一个)?

ken*_*n2k 4

根据我的经验,WCF + 实体框架 + 延迟加载 + 深层对象图 + 性能要求 = 大的潜在问题。

没有什么神奇的灵丹妙药可以解决所有问题,我最终得出以下结论:

  • 延迟加载已禁用。我认为延迟加载只会产生更多可以解决的问题:如果使用不当,会出现性能问题,难以捕获异常(因为 SQL 请求可以随时执行,而不仅仅是在最初从D B)
  • T4 模板已修改,因此导航属性的设置器现在为private。不再自动序列化到客户端的对象集合
  • 通过 WCF 以及自定义 POCO发送到客户端的急切加载对象图(如果您想在单个 WCF 调用中获取多个实体)。
  • 没有通用存储库模式。客户端只是调用一些GetXXXX/GetXXXByYYY方法。甚至GetXXXByYYYWithZZZZWithWWWWwhereZZZZWWWW是急切加载的属性的名称。是的,可能有很多方法,但只有在应用程序的客户端实际需要时才构建它们,并且您知道自己在做什么。这对于获得良好的表现有很大帮助。

暴露 200 多个不同的服务(每个对象一个)是不是很糟糕?

这些是单个服务中200 多个不同的操作(我想)。如果您的客户端实际上需要访问所有服务器端实体,那么是的,200 多个操作就可以了,这里没有什么魔力。