当前位置 : 主页 > 网络安全 > 测试自动化 >

wcf – 使用Svcutil对ChannelFactory与预生成代理的性能

来源:互联网 收集:自由互联 发布时间:2021-06-22
Svcutil生成的代理是否比运行时使用的ChannelFactory提供更好的性能? ChannelFactory默认情况下是否缓存代理? 我正在使用.NET 4,该服务包含100多个操作和超过500个数据协定. 当我使用ChannelF
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);
使用Svcutil生成代码时,会得到一个扩展为 ClientBase的类,它是 ChannelFactory的包装器.

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

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

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

> Performance Improvement for WCF Client Proxy Creation in .NET 3.5 and Best Practices
> Best Practice: Always open WCF client proxy explicitly when it is shared

网友评论