【问题标题】:Wrapping a .NET WCF service proxy class in a USING { } block?在 USING { } 块中包装 .NET WCF 服务代理类?
【发布时间】:2010-09-21 15:17:40
【问题描述】:

快速的问题,但是将服务代理类包装在 using 语句中是最佳实践吗?这意味着,在 VS 中,我们为 WCF 服务生成了一个代理。对于服务类,是否应该包装在使用中?我不相信它实现了 IDisposable 并且没有 Dispose() 方法。谢谢。

【问题讨论】:

    标签: asp.net wcf web-services


    【解决方案1】:

    虽然服务参考和 svcutil.exe 生成的代理 实现了 IDisposable,但通常不是将它们包装在 using 块中的最佳做法;而是支持显式打开和关闭。

    为什么?好吧,问题在于Dispose 方法调用Close它可以在各种情况下抛出,尤其是在通道处于故障状态时。一般来说,这很糟糕,但如果在 finally 块期间发生这种情况,因为您让错误异常冒泡,它可能会吞下原始错误异常以支持Close 异常,从而有效地丢失原始异常。

    【讨论】:

    • 通常我不会明确地打开和关闭。我通常初始化服务并在其上调用方法——完成后从不真正关闭。我也经常看到这个。不好的做法?
    • @Ryan Peters:如果您使用的是using 块,除了我提到的问题之外,这不是一个坏习惯。但是,当您不使用它时,无论是显式还是隐式,您都应该始终关闭它。另一方面,显式打开通道并不总是必要的,因为代理上的第一个操作调用将始终打开通道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2011-11-09
    • 2011-09-21
    相关资源
    最近更新 更多