Home Articles

.Net 4.5中是否仍存在C#WCF代理ClientBase <T>处置问题

Asked
Viewed 140 times
4

在早期版本的C#.Net中,当处置WCF代理(服务引用生成的客户端)时存在问题 - 这在.Net 4.5中是否仍然存在?

这个问题的全部细节可以在这里找到...... https://coding.abel.nu/2012/02/using-and-disposing-of-wcf-clients ...但总结一下,本质上是服务参考生成的代理上的 IDisposable 实现,无条件地称为 Close() 而没有先检查 State . 如果从被调用的服务中抛出未处理的异常,这将使通道出错,然后对代理执行任何操作(包括尝试调用 Dispose() )将导致辅助 CommunicationException - 混淆原始异常,并离开代理处于无法使用的状态 . 考虑到这一点,尽管事实上它实现了 IDisposable ,但它实际上无法将代理包装在using {}构造中,并且它在很大程度上被视为WCF错误 .

有几种模式可以解决这个问题,我不打算在这里介绍它们 . 我需要知道的是,因为它在很大程度上被认为是一个WCF错误,它已被修复了吗?我在interweb上找不到任何建议IDisposable的有缺陷的实现不再有缺陷?

UPDATE: 我刚发现这个... https://msdn.microsoft.com/en-us/library/aa355056(v=vs.110).aspx ...这表明它认为它没有't been fixed yet. This issue has been around since WCF first appeared. What'在这些代理上实现IDisposable的意义?

1 Answer

Related