WCF性能改进

时间:2010-03-27 18:58:25

标签: wcf performance web-services

我正在开发一个WPF应用程序,它通过互联网上的WCF服务与服务器通信。在分析应用程序之后,我注意到通过创建适当的WCF客户端代理并调用服务器来占用大量时间。

服务器上的代码已经过优化,并且不需要任何时间来运行我仍然看到从服务被重新启动到返回客户端的1.5秒延迟。

提供一些背景知识的几点:

  • 我使用ASP.Net会员资格来保障
  • 我最终将通过网站挂钩到相同的服务器端代码
  • 我最终希望在应用程序中提供离线支持

我真的需要尽早确定性能,但好像应用程序需要几秒钟才能回来,这对我想做的事情来说太长了。

有人可以提供有助于我的性能提示吗?

1 个答案:

答案 0 :(得分:1)

WCF中的客户端代理基本上由两部分组成。如果您控制通信的两端 - 例如如果您同时编写服务器端和客户端端 - 您可以通过执行以下步骤来优化它:

  • 将所有服务和数据合同隔离到他们自己的单独程序集中
  • 在服务器端(实现您的服务)以及客户端
  • 引用该程序集

这样做,您不需要使用Add Service Reference创建“通用”客户端代理,而是可以将该过程分为两个单独的步骤:

  • 第一步是使用您的服务合同创建ChannelFactory<T>,例如

    ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>();
    

    因为您需要在客户端访问服务合同,所以需要将这些合同分离到自己的程序集中,以便您可以在客户端引用相同的合同。创建渠道工厂是一个昂贵的部分 - 您希望挂在该渠道工厂并将其放入一个共享的缓存容器(您的主要形式或其他东西)。

  • 第二步是从渠道工厂创建实际渠道(“代理”):

    IMyService proxy = factory.CreateChannel();
    

    此操作的资源消耗大大减少,可以在每次服务调用之前执行,不应造成太多浪费时间。

因此,通过一些基本步骤,您应该能够显着简化并加速构建服务客户端代理。