ChannelFactory <t>与使用Svcutil的预生成代理的性能</t>

时间:2012-03-02 06:01:48

标签: wcf svcutil.exe channelfactory performance

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

我正在使用.NET 4,该服务包含100多个操作和超过500个数据合同。

当我使用ChannelFactory<T>时,需要很长时间才能将代理返回给我。可以建议哪个是创建代理的最佳方式吗?

我的代码如下所示:

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);

1 个答案:

答案 0 :(得分:2)

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

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

从您的代码中不清楚您在做什么,但是您是否在每次操作调用时创建ChannelFactory?创建ChannelFactory非常昂贵,您通常会缓存该实例,然后使用它打开,使用,然后关闭Channels进行操作调用。

有关详细说明,请参阅以下页面: