4

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

1 回答 1

2

当您使用 Svcutil 生成代码时,您会得到一个扩展类ClientBase,它是ChannelFactory.

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

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

有关更详细的说明,请参见以下页面:

于 2012-03-02T20:53:12.090 回答