多个WCF调用单个ASP.NET页面加载

时间:2010-04-30 22:26:28

标签: asp.net wcf performance pageload

我有一个现有的asp.net Web应用程序,我正在重新设计使用服务架构。我有一个WCF服务的开头,我能够调用并执行功能没有问题。至于更新数据,这一切都是有道理的。例如,我有一个显示提交订单的按钮,它将数据发送到服务,进行处理。

这是我的担心:如果我有一个ASP.NET页面向我显示订单列表(查看订单页面),在顶部我有一堆订单类型的下拉列表,以及其他搜索条件通过查询数据库中的不同表(查找表等)来填充。我希望最终完全将Web应用程序与数据库分离,并使用数据契约在BLL,SOA和Web应用程序之间传递信息。话虽如此,如何减少加载“查看订单”页面所需的WCF调用次数?我需要进行1次调用获取订单列表,并为每个下拉列表调用1次,因为这些是由我的BLL中的各个函数填充的。

创建一个Web服务方法是一个很好的架构,它返回一个专门的数据协定,其中包含一次显示View Orders页面所需的所有内容吗?像这样的伪代码:

public class ViewOrderPageDTO
{
  public OrderDTO[] Orders { get; set; }
  public OrderTypesDTO[] OrderTypes { get; set; }
  public OrderStatusesDTO[] OrderStatuses { get; set; }
  public CustomerListDTO[] CustomerList { get; set; }
}

或者更好的做法是在page_load事件中对SOA进行5或6甚至15次单独调用以获取加载页面所需的数据?因此,是否需要专门的wcf方法或将其他DTO集合在一起的DTO?

感谢您的意见和建议。

2 个答案:

答案 0 :(得分:0)

我可能建议首先保持简单,只需为您需要检索的每种类型的实体进行一次调用。如果您考虑一下,当浏览器加载网页时,会产生大量的HTTP请求来获取html和所有内容文件,因此在该过程中调用一些服务方法并不可怕。只要服务快速而小巧,它就不会成为太大的问题。

如果您看到性能问题,我会专注于那些,而不是尝试预先优化任何东西。您可以将多个服务调用集中在一起,或者在服务器端或客户端实现缓存层。

答案 1 :(得分:0)

绝对这是一个很好的设计,可以让Web服务方法/操作专门用于提供显示特定“业务对象”所需的完整数据集。

事实上,这种类型的设计是Web服务和SOA的本质。您提供情报抽象,而不仅仅是类似CRUD的数据访问方法。

与通过单个网页进行5或6个Web服务调用相比,这也会比更多更好。 5-6次调用很多,特别是当你能够将其减少到只有1. Web服务调用往往很昂贵,至少与基本数据访问或缓存查找相比,你真的想要尽可能减少“喋喋不休”的数量。

你的第一直觉是正确的。使用粗粒度的Web服务,为您提供所需的一切。