【问题标题】:Performance of ChannelFactory<T> versus pre-generated proxy using SvcutilChannelFactory<T> 与使用 Svcutil 的预生成代理的性能
【发布时间】:2012-03-02 06:01:48
【问题描述】:

Svcutil 生成的代理是否比运行时使用的 ChannelFactory 提供更好的性能? ChannelFactory 是否默认缓存代理?

我将 .NET 4 与一项服务一起使用,该服务有 100 多个操作和 500 多个参与其中的数据合约。

当我使用ChannelFactory&lt;T&gt; 时,需要很长时间才能将代理返回给我。有人能建议哪种方法是创建代理的最佳方式吗?

我的代码如下所示:

EndpointAddress endPoint = new EndpointAddress(url);
// My own API which gives the custom binding I create programatically
CustomBinding binding = BindingFactory.GetCustomBinding("WSECustomBinding");
ChannelFactory<T> factory = new ChannelFactory<T>(binding, endPoint);

【问题讨论】:

    标签: wcf svcutil.exe channelfactory performance


    【解决方案1】:

    当您使用 Svcutil 生成代码时,您会得到一个扩展 ClientBase 的类,它是 ChannelFactory 的包装器。

    Svcutil 代理允许您将服务作为对象上的方法调用,而不是直接与 ChannelFactories/Channels 交互,除此之外,确实提供了一些额外的功能,例如缓存通道工厂,但在底层它是 the same engine

    从您的代码中不清楚您在做什么,但是您是否在每个操作调用上创建 ChannelFactory?创建 ChannelFactory 的成本很高,您通常会缓存该实例,然后使用它来打开、使用、然后关闭 Channel 以进行操作调用。

    更多详细解释请参见以下页面:

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2014-04-15
      • 2011-10-20
      • 1970-01-01
      相关资源
      最近更新 更多