是否存在太多WCF服务?

时间:2013-07-05 15:56:11

标签: c# performance wcf

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

没有令人惊奇的银弹可以解决所有问题,我最终得到了以下结论:

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

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

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