none
关于WCF的一个设计问题 RRS feed

  • 问题

  • 在我的项目中,需要开发一个订单管理平台,但是订单中所需要的客户信息却在另外的一个系统中。项目设计中需要我的订单平台通过WCF访问客户信息。

    我的设计如下:

    public class Order
    {
      ......
      
      public Guid Id {get;set}
      public Customer Consignor{get;set} //这里的Customer是从WCF中引用的类;
      ......
    }
    

    于是我的问题就来了,在使用ORM实例化订单列表时,系统需要不断的访问WCF服务(订单数据量较大),造成严重的瓶颈。

    第一次接触WCF,也许是我的设计问题。

    请求各位帮个忙,看看这里应该怎样设计或实现。

     

    2010年5月4日 17:01

答案

全部回复

  • Order是数据契约

    在使用ORM实例化订单列表时,系统需要不断的访问WCF服务(订单数据量较大),造成严重的瓶颈。

     

    ----------------------------------------

       你的意思 是 一次可能返回 多个表单?就是一个表单list?

    每次实例化表单的时候,都要调用其它服务?吗


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年5月5日 3:00
    版主
  • 应该是这样

    OrderList 中的每一笔Order 都会有 委托客户(Consignor), 结算客户(Drawee), 供应商(Providers), 订单中需要他们的详细信息。

    这里的 委托客户(Consignor), 结算客户(Drawee), 供应商(Providers) 都是来自WCF Service.

    2010年5月7日 4:37
  • 不要为每一条 Order 都去访问 Wcf 客户信息服务.

    OrderList 数据分两步加载:

    1,加载 OrderList,但不包括 Consignor,Drawee,Providers;

    2,通过OrderList中的 Guid Array,一次性从 Wcf 客户信息服务获取所有的 Consignor,Drawee,Providers;

    作为优化方案,Providers 是相对稳定的,可以在本地缓存.

    2010年5月7日 8:17
  • Henry,

    建议你先确定性能下降的原因,

    若是由于频繁访问WCF造成WCF服务器并发相应瓶颈,参考如下文章对服务器配置进行优化,还不行的话,需考虑硬件升级

    Service Throttling
    http://msdn.microsoft.com/en-us/library/ms731379.aspx 

    Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications
    http://support.microsoft.com/kb/821268

    若是因为单个Message的数据量太大,尝试Galactica的方法,在逻辑上去除可能的冗余数据,同时,使用BinaryEncoding比Text或Mtom能更有效的压缩消息。

    另外,Gzip Encoder 可以进一步压缩消息
    http://msdn.microsoft.com/en-us/library/cc138373(VS.90).aspx
    不过,估计性能不会很好。

     


    Mog Liang
    • 已建议为答案 Mog Liang 2010年5月11日 9:46
    • 已标记为答案 Mog Liang 2010年5月12日 7:39
    2010年5月11日 9:46