【发布时间】:2011-09-27 04:54:39
【问题描述】:
我正在通过 ChannelFactory 类手动初始化我的代理,因为初始化此代理的配置来自其他一些配置服务(不在同一个 App.Config 中)并且为了避免初始化成本(服务调用、读取配置设置)我缓存了这个代理。我无法承担在每次操作后关闭此代理的成本,因为需要频繁执行操作。该代理的超时配置如下。
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
closeTimeout="00:10:00"
根据我对客户端超时属性的理解,当超时超过时,我的代理的状态将是故障。对?
我想重新初始化我的代理,所以我有 2 个选项来执行此操作。
1) 我使用 ICommunicationObject.Faulted 事件处理程序,当我的代理进入故障状态时,即使我重新初始化代理。但是这种实现并不合适,因为我们没有正确地处理代理(调用 .Close() 方法),它不会从服务端释放资源并影响我的性能。
2) 我创建了一个线程,并在代理进入故障状态前几秒钟设置了它的经过时间。通过调用 .Close{) 方法正确关闭此代理并重新初始化另一个对象并缓存它。
请建议我在性能方面哪个选项好,如果有其他解决方案可以避免这个问题,请告诉我。
提前致谢。
【问题讨论】:
标签: wcf wcf-client